Laravelのサブフォルダー内の重複ファイルを防ぐ方法
P粉770375450
2023-07-31 16:12:39
<p>複数のファイルを同時にアップロードできる追加ビューを作成しました。ファイルをアップロードすると、ファイル パスは「Drawings/PartNumber/Type/filename.extension」のような形式で表示されます。 「Drawings」フォルダーをチェックインして、同じ拡張子を持つファイルがないことを確認したいと思います。これを達成するにはどうすればよいでしょうか? </p>
<ol>
<li>図面/部品番号 1/タイプ 1/ファイル名 1.pdf</li>
<li>図面/部品番号 2/タイプ 2/ファイル名 1.pdf</li>
<li>図面/部品番号 1/タイプ 3/ファイル名 1.pdf</li>
<li>図面/部品番号 1/ファイル名 1.pdf</li>
<li>図面/ファイル名1.pdf
決して受け入れられません。</li>
</ol>
<p>私の機能は次のとおりです: </p>
<pre class="brush:php;toolbar:false;">パブリック関数 AddNewPart(Request $request)
{
if (array_key_exists('DrawingFile',$data)) {
foreach($request->file('DrawingFile') as $key=>$file)
{
if ($data['fileupload_ID'][$key]==NULL) {
$extension=$file->getClientOriginalExtension();
$file_name2 = $file->getClientOriginalName();
$filepath='Drawings/'.$data['PartNumber'].'/'.$data['Type'][$key].'/'.$file_name2;
$file->move(public_path('Drawings/'.$data['PartNumber'].'/'.$data['Type'][$key].'/'), $file_name2);
$DocumentData2=array('Type'=>$data['Type'][$key],'fcontent'=>$file_name2,'condpartno'=>$data['PartNumber'],'fname'= >$ファイルパス、
'DrawingNo'=>$data['DrawingNo'][$key],'DocumentType'=>$data['Type'][$key]);
DB::table('fileupload')->insert($DocumentData2);
}
}
}
}</pre>
<p><br /></p>
同じファイルが異なるサブディレクトリに複数回アップロードされるのを防ぎたい場合は、Laravel のファイルシステムを利用して、アップロードする前にファイルが存在するかどうかを確認できます。
File ファサードには、指定されたパスにファイルが存在するかどうかを確認するために使用できるexists メソッドが用意されています。
これを変更する方法は次のとおりです:
リーリー上記のコードは、指定されたディレクトリにファイルが存在しない場合にのみアップロードされます。ファイルがすでに存在する場合は、「ファイルはすでに存在します」というメッセージを含むエラー応答が返されます。
注意すべき点の 1 つは、getClientOriginalName() メソッドの動作です。クライアント マシンからのファイルの元の名前が返されるため、異なるクライアントからのファイルが同じ名前を持つ場合に問題が発生する可能性があります。これが問題となる場合は、アップロード時に独自の命名規則を実装することを検討してください。
また、ファイルの先頭に必要なクラスをインポートすることを忘れずに、必須フィールドの欠落やデータベース挿入の失敗などの潜在的な問題に対処するように注意してください。