P粉1542284832023-08-01 00:11:46
如果您希望防止相同的檔案在不同的子目錄中被多次上傳,您可以利用 Laravel 的檔案系統(Filesystem)並在嘗試上傳檔案之前檢查檔案是否存在。
檔案門面(File facade)提供了一個 exists 方法,您可以使用它來檢查給定路徑中的檔案是否存在。
下面是您可能會修改的方法:
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); } } } } }
上述程式碼只會在指定目錄中不存在該檔案時才進行上傳。如果檔案已經存在,則會傳回一個帶有訊息 '檔案已存在' 的錯誤回應。
要注意的一點是 getClientOriginalName() 方法的行為。它將傳回來自客戶端機器的檔案的原始名稱,如果來自不同客戶端的檔案具有相同的名稱,可能會導致問題。如果這是一個問題,請考慮在上傳時實作唯一命名約定。
此外,請記住在文件的頂部導入必要的類,並注意處理所有潛在問題,如缺少必填欄位或資料庫插入失敗。