Laravel 5.4使用"存储:: putFile"

时间:2017-07-31 15:20:00

标签: php laravel laravel-5 laravel-5.4

我正在使用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'));
}

任何人都可以

  1. 描述&#34; putFile&#34;的签名这样我就明白了? ;-)
  2. 告诉我为什么我的例子出错了,为什么我得到这个FileNotFoundException?
  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

传递给putFile的第一个参数是新文件位置。示例:/path/to/new/file/

第二个参数是FileUploadedFile实例。这可以来自request()->file('uploadedFile')

因此你的控制器应该阅读

public function store() {
    return Storage::putFile(
               storage_path('uploads'),
               request()->file('uploadedFile')
           );
}

生成的哈希将用于文件名。

参考: