Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menghalang fail pendua dalam subfolder dalam Laravel

<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粉770375450P粉770375450421 hari yang lalu456

membalas semua(1)saya akan balas

  • P粉154228483

    P粉1542284832023-08-01 00:11:46

    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.


    balas
    0
  • Batalbalas