So verhindern Sie doppelte Dateien in Unterordnern in Laravel
P粉770375450
2023-07-31 16:12:39
<p>Ich habe eine Add-Ansicht erstellt, die mehrere Dateien gleichzeitig hochladen kann. Wenn eine Datei hochgeladen wird, wird der Dateipfad in einem Format angezeigt, das dem Format „Zeichnungen/Teilenummer/Typ/Dateiname.Erweiterung“ ähnelt. Ich möchte im Ordner „Zeichnungen“ nachsehen, ob keine Datei dieselbe Erweiterung hat. Wie erreicht man das? </p>
<ol>
<li>Zeichnungen/Teilenummer1/Typ1/Dateiname1.pdf</li>
<li>Zeichnungen/Teilenummer2/Typ2/Dateiname1.pdf</li>
<li>Zeichnungen/Teilenummer1/Typ3/Dateiname1.pdf</li>
<li>Zeichnungen/Teilenummer1/Dateiname1.pdf</li>
<li>Zeichnungen/Dateiname1.pdf
wird niemals akzeptiert.</li>
</ol>
<p>Meine Funktion ist: </p>
<pre class="brush:php;toolbar:false;">public function 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'= >$filepath,
'DrawingNo'=>$data['DrawingNo'][$key],'DocumentType'=>$data['Type'][$key]);
DB::table('fileupload')->insert($DocumentData2);
}
}
}
}</pre>
<p><br /></p>
如果您希望防止相同的文件在不同的子目录中被多次上传,您可以利用 Laravel 的文件系统(Filesystem)并在尝试上传文件之前检查文件是否存在。
文件门面(File facade)提供了一个 exists 方法,您可以使用它来检查给定路径中的文件是否存在。
下面是您可能会修改的方法:
上述代码只会在指定目录中不存在该文件时才进行上传。如果文件已经存在,则会返回一个带有消息 '文件已存在' 的错误响应。
需要注意的一点是 getClientOriginalName() 方法的行为。它将返回来自客户端机器的文件的原始名称,如果来自不同客户端的文件具有相同的名称,可能会导致问题。如果这是一个问题,请考虑在上传时实施唯一命名约定。
此外,请记住在文件的顶部导入必要的类,并注意处理所有潜在问题,如缺少必填字段或数据库插入失败。