我正在使用Laravel 5.4,并希望将文件(让我们称之为" lorem.ext")上传到存储目录(storage / app /)" path /至/文件"具有唯一的文件名。
为此我想使用Storage :: putFile(https://laravel.com/docs/5.4/filesystem#storing-files),它不仅存储我的文件,还会自动创建一个唯一的文件名。
文档说要使用:
Storage::putFile('uploadedFile', new File('/path/to/file'));
使用此,我将收到错误
FileNotFoundException in File.php line 37: The file "/path/to/file" does not exist
我的进一步想法:
老实说,我并不确切地知道签名的含义,也从未在网上找到putFile的工作示例。在文档中没有描述和仔细观察(https://laravel.com/api/5.4/Illuminate/Filesystem/FilesystemAdapter.html#method_putFile),也没有信息。
我认为这意味着:
第一个参数" uploadedFile" (或https://laravel.com/docs/5.4/filesystem#storing-files调用它:"照片")将通过视图中表单的ID自动获取文件:
<input type="file" id="uploadedFile" name="uploadedFile">
并且不再需要通过
加载它request()->file('uploadedFile')
第二个参数&#34;新文件(&#39; / path / to / file&#39;)&#34; (或https://laravel.com/docs/5.4/filesystem#storing-files称之为:&#34;新文件(&#39; / path / to / photo&#39;)&#34;)将指定目标服务器上没有文件名的存储目录:
.../storage/app/path/to/file/formerLoremNowUniqueFileName.ext
如此完整的示例,我可以上传我的lorem.ext,它将存储在... / storage / app / path / to / file / formerLoremNowUniqueFileName.ext(这不起作用):
查看:
<form method="POST" action="URL/TO/STORE" enctype="multipart/form-data">
{{ csrf_field() }}
<input type="file" id="uploadedFile" name="uploadedFile">
<button type="submit" class="btn btn-primary">Upload</button>
</form>
控制器:
public function store() {
return Storage::putFile('uploadedFile', new File('/path/to/file'));
}
任何人都可以
谢谢!
答案 0 :(得分:2)
传递给putFile
的第一个参数是新文件位置。示例:/path/to/new/file/
第二个参数是File
或UploadedFile
实例。这可以来自request()->file('uploadedFile')
。
因此你的控制器应该阅读
public function store() {
return Storage::putFile(
storage_path('uploads'),
request()->file('uploadedFile')
);
}
生成的哈希将用于文件名。