2017-06-07 61 views
0

我有一個<form>與多個文件輸入,將這些文件存儲到服務器。文件的名稱必須遵循數字標準,這就是爲什麼在存儲之前重命名它們的原因。每個帖子都有一個ID可以有多個文件,所以模式是:post-id + dash和一個數字+文件擴展名,這種方式,如果同一篇文章有​​兩個文件具有相同的擴展名,則短劃線+數字將避免他們被覆蓋。因此,在我存儲文件之前,我運行一個循環來找到名稱的正確編號。問題是,驗證文件存在的函數似乎並不是在它應該返回時才返回true。的代碼:PHP/Laravel文件存在驗證不起作用

$counter = 0; 
do{ 
    $nomeArquivo = $post->id . "-{$counter}" . "." . $arq->extension(); 

    $counter++; 
//these commented are other ways of verification I tried 
//}while(Storage::exists($nomeArquivo)); 
//}while(file_exists("/storage/" . $nomeArquivo)); 
}while(is_file("/storage/" . $post->id . "-{$counter}")); 

Storage::putFileAs('/public', $arq, $nomeArquivo); 

此代碼上方的foreach($files as $arq)其中$files是從表單輸入文件內運行。

參考:https://laravel.com/docs/5.4/filesystemhttps://laravel.com/api/5.4/Illuminate/Filesystem/Filesystem.html

+0

有必要擁有您指定的文件名,否則您可以使用唯一的名稱來存檔 –

+0

是的,我通過將其指定給變量$ nomeArquivo來完成。我嘗試過,沒有完整的路徑,但都沒有工作 – Fabiotk

+1

你的代碼不太可能工作,因爲你正在'/ storage'中檢查文件的存在,但是你將文件寫入'/ public'。如果您不使用內置的「存儲」或「文件」外觀,請使用'public_path'或'storage_path'幫助程序檢查文件並將其保存在正確的位置。 – fubar

回答

0

正如用戶@fubar指出的評論,我引用錯誤的路徑來驗證文件的存在。我將條件改爲while(\File::exists(public_path() . '/storage/' . $nomeArquivo)),它運行良好。謝謝

1

如果名字該文件只需要是唯一的,

你可以給這樣的唯一名稱:

$file = $request->file('file'); 
$extension = $file->getClientOriginalExtension(); 
$destination ='/files/'; 
$filename = uniqid() . '.' . $extension; 
$file->move($destination, $filename); 

現在保存在您的數據庫的文件名上面。希望它可以幫助你