Laravel,上传文件的网址

时间:2017-11-22 16:58:26

标签: laravel url laravel-5 laravel-5.5

我目前正在开发一个Laravel 5.5项目,我想要 上传文件然后,我想获取文件的网址(我必须使用客户端)。

现在我的代码看起来像这样:

public function pdfUploader(Request $request)
{
  Log::debug('pdfUploader is called. ' . $request);
  if ($request->hasFile('file') && $request->file('file')->isValid()) {
    $extension = $request->file->extension();
    $fileName = 'tmp' . round(microtime(true) * 1000) . '.' . $extension;
    $path = $request->file->storeAs('temp', $fileName);
    return ['status' => 'OK', 'path' => URL::asset($path)];
  }
  return ['status' => 'NOT_SAVED'];
}

它工作正常,我恢复了OK状态和路径,但当我想使用路径时,我得到了HTTP 404 。我查了一下,文件上传得很好..

我的想法是,我应该在路线中注册新的网址。如果必须,我怎么能动态地做,如果没有必要我的功能有什么问题呢?

提前回答。

1 个答案:

答案 0 :(得分:2)

默认情况下,laravel会将所有上传的文件存储到存储目录中,例如,如果您致电$request->file->storeAs('temp', 'file.txt'); laravel将在temp中创建storage/app/文件夹并将文件放在那里:

$request->file->storeAs('temp', 'file.txt'); => storage/app/temp/file.txt
$request->file->storeAs('public', 'file.txt'); => storage/app/public/file.txt

但是,如果您想通过网络访问上传的文件,有两种方法可以做到:

将上传的文件移至公共目录

$request->file->move(public_path('temp'), $fileName); // => public/temp/file.txt
URL::asset('temp/'.$fileName); // http://example.com/temp/file.txt

注意:确保您的网络服务器有权写入公共目录

创建从存储目录到公共目录的符号链接

php artisan storage:link

此命令将创建从public/storagestorage/app/public的符号链接,在这种情况下,我们可以将文件存储到storage/app/public,并通过符号链接从网络访问它们:

$request->file->storeAs('public', $fileName); // => storage/app/public/file.txt
URL::asset('storage/'.$fileName); // => http://example.com/stoage/file.txt