代码之家  ›  专栏  ›  技术社区  ›  LakiGeri

Laravel,获取上传文件的url

  •  2
  • LakiGeri  · 技术社区  · 8 年前

    我目前正在从事Laravel 5.5项目 希望 上载文件 , 那么,我想 获取他们的url 文件(我必须在客户端使用它)。

    现在,我的代码如下所示:

    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'];
    }
    

    它很好用,我 当我想使用路径时, 我得到了HTTP 404 . 我查过了,文件上传得很好。。

    我的想法是,我应该在路由中注册新的url。如果必须这样做,我如何动态地完成它?如果没有必要,我的函数有什么问题?

    Thx提前回答。

    1 回复  |  直到 8 年前
        1
  •  4
  •   YouneL    7 年前

    默认情况下,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
    

    注释 :确保您的web服务器具有写入公共目录的权限

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

    php artisan storage:link
    

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

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