Bagaimana untuk menghalang fail pendua dalam subfolder dalam Laravel
P粉770375450
2023-07-31 16:12:39
<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>
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:
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.