我有一个带有多个文件输入的<form>
,用于将这些文件存储到服务器中。文件的名称必须遵循数字标准,这就是我在存储之前重命名它们的原因。每个帖子都有一个ID,可以有多个文件,所以模式是:post-id + dash和数字+文件扩展名,这样,如果同一帖子有两个文件具有相同的扩展名,短划线+号码将避免他们被覆盖了。所以,在我存储文件之前,我运行一个循环来找到名称的正确数字。问题是,验证文件存在的函数似乎不应该返回true。代码:
$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/filesystem和https://laravel.com/api/5.4/Illuminate/Filesystem/Filesystem.html
答案 0 :(得分:1)
使用文件外观检查文件是否存在:
文件::存在($ MYFILE)
http://laravel-recipes.com/recipes/123/determining-if-a-file-exists
答案 1 :(得分:1)
如果文件名只有,那么,
您可以像这样给出唯一名称:
$file = $request->file('file');
$extension = $file->getClientOriginalExtension();
$destination ='/files/';
$filename = uniqid() . '.' . $extension;
$file->move($destination, $filename);
现在在数据库中保存上面的文件名。希望它可以帮到你
答案 2 :(得分:0)
当用户@ fubar在评论中指出时,我引用了错误的路径来验证文件是否存在。我将while条件更改为while(\File::exists(public_path() . '/storage/' . $nomeArquivo))
并且效果很好。感谢