Bagaimana untuk menghalang fail pendua dalam subfolder dalam Laravel
P粉770375450
P粉770375450 2023-07-31 16:12:39
0
1
502
<p>Saya mencipta paparan tambahan yang boleh memuat naik berbilang fail pada masa yang sama. Apabila fail dimuat naik, laluan fail akan dipaparkan dalam format yang serupa dengan 'Lukisan/Nombor Bahagian/Jenis/nama fail.sambungan'. Saya ingin menyemak dalam folder 'Lukisan' untuk memastikan tiada fail mempunyai sambungan yang sama. Bagaimana untuk mencapai ini? </p> <ol> <li>Lukisan/PartNumber1/Type1/filename1.pdf</li> <li>Lukisan/Nombor Bahagian2/Jenis2/nama fail1.pdf</li> <li>Lukisan/PartNumber1/Type3/filename1.pdf</li> <li>Lukisan/Nombor Bahagian1/nama fail1.pdf</li> <li>Lukisan/nama fail1.pdf tidak akan diterima.</li> </ol> <p>Fungsi saya ialah:</p> <pre class="brush:php;toolbar:false;">fungsi awam AddNewPart(Minta $request) { if (array_key_exists('DrawingFile',$data)) { foreach($request->file('DrawingFile') sebagai $key=>$file) { if ($data['fileupload_ID'][$key]==NULL) { $extension=$file->getClientOriginalExtension(); $file_name2 = $file->getClientOriginalName(); $filepath='Lukisan/'.$data['Nombor Bahagian'].'/'.$data['Jenis'][$kunci].'/'.$nama_fail2; $file->move(public_path('Drawings/'.$data['PartNomber'].'/'.$data['Type'][$key].'/'), $file_name2); $DocumentData2=array('Type'=>$data['Type'][$key],'fcontent'=>$file_name2,'condpartno'=>$data['PartNomber'],'fname'= >$filepath, 'DrawingNo'=>$data['DrawingNo'][$key],'DocumentType'=>$data['Type'][$key]); DB::table('fileupload')->insert($DocumentData2); } } } }</pre> <p><br /></p>
P粉770375450
P粉770375450

membalas semua(1)
P粉154228483

Jika anda ingin menghalang fail yang sama daripada dimuat naik beberapa kali dalam subdirektori yang berbeza, anda boleh memanfaatkan Sistem Fail Laravel dan menyemak sama ada fail itu wujud sebelum cuba memuat naiknya.

Fasad Fail menyediakan kaedah wujud yang boleh anda gunakan untuk menyemak sama ada fail dalam laluan tertentu wujud.

Begini cara anda boleh mengubah suainya:


use Illuminate\Support\Facades\File;

public function AddNewPart(Request $request)
{
    if (array_key_exists('DrawingFile',$request->all())) {
        foreach($request->file('DrawingFile') as $key=>$file)
        {
            if ($request->fileupload_ID[$key] == NULL) {
                $extension = $file->getClientOriginalExtension();
                $file_name2 = $file->getClientOriginalName();
                $filepath = 'Drawings/'.$request->PartNumber.'/'.$request->Type[$key].'/'.$file_name2;

                // Check if the file already exists before moving it
                if (!File::exists(public_path($filepath))) {
                    $file->move(public_path('Drawings/'.$request->PartNumber.'/'.$request->Type[$key].'/'), $file_name2);

                    $DocumentData2 = array(
                        'Type'=>$request->Type[$key],
                        'fcontent'=>$file_name2,
                        'condpartno'=>$request->PartNumber,
                        'fname'=>$filepath,
                        'DrawingNo'=>$request->DrawingNo[$key],
                        'DocumentType'=>$request->Type[$key]
                    );

                    DB::table('fileupload')->insert($DocumentData2);
                } else {
                    // You might want to return some feedback to the user here
                    return response()->json([
                        'error' => 'File already exists.'
                    ], 400);
                }
            }
        }
    }
}

Kod di atas hanya akan dimuat naik jika fail tidak wujud dalam direktori yang ditentukan. Jika fail sudah wujud, respons ralat dengan mesej 'Fail sudah wujud' dikembalikan.

Satu perkara yang perlu diperhatikan ialah kelakuan kaedah getClientOriginalName(). Ia akan mengembalikan nama asal fail daripada mesin klien, yang mungkin menyebabkan masalah jika fail daripada klien berbeza mempunyai nama yang sama. Jika ini adalah masalah, pertimbangkan untuk melaksanakan konvensyen penamaan yang unik semasa memuat naik.

Selain itu, ingat untuk mengimport kelas yang diperlukan di bahagian atas fail dan berhati-hati untuk mengendalikan sebarang isu yang berpotensi seperti kehilangan medan yang diperlukan atau sisipan pangkalan data yang gagal.


Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan