【问题标题】:Laravel file upload NotFoundHttpExceptionLaravel 文件上传 NotFoundHttpException
【发布时间】:2015-01-08 00:11:37
【问题描述】:

我正在使用 Laravel 将图像上传到我的文件夹。

$file = Input::file('largeImage');
$filePath = '/uploads/'.date("Y/m").'/'.time().'/';
$path = $filePath;
$file->move($path, $file->getClientOriginalName());

图片上传成功。

现在当我尝试访问它时:

http://localhost:8080/uploads/2015/01/1420644761/10377625_673554946025652_6686347512849117388_n.jpg

我遇到了Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException 错误。

我什至试过http://localhost:8080/public/uploads/2015/01/1420644761/10377625_673554946025652_6686347512849117388_n.jpg

但同样的错误。可能是什么问题?我检查了上传文件夹,图像在那里。

【问题讨论】:

  • 从错误来看,它看起来像是Route::ing 问题,但奇怪的是您需要为这样的文件定义路由,所以我不确定。让我进一步研究一下。
  • 我就是这么想的。

标签: php laravel laravel-4


【解决方案1】:

您需要添加对 public_path 助手的调用:

$filePath = public_path() . '/uploads/'.date("Y/m").'/'.time().'/';

我认为,否则它会将其放在应用程序根目录中。

【讨论】:

    【解决方案2】:

    这对我有用:

        $file = Input::file('largeImage');
        $filePath = '/uploads/'.date("Y/m").'/'.time().'/';
        $filename = $file->getClientOriginalName();
        $path = public_path().$filePath;
        $file->move($path, $file->getClientOriginalName());
    

    【讨论】:

    • Tom 的回答对于这种情况是正确的,但是定义一个Route 可以用来从系统下载任何文件,这也很高兴知道。很高兴你能成功!
    【解决方案3】:

    好的,这是一个路由问题。要解决这个特定问题,请定义一个导航到您的文件的 Route::get

    Route::get("/download/{year}/{month}/{time}/{filename}", "Controller@downloadFile");
    

    然后你需要在那个控制器中处理文件下载的函数:

    public function downloadFile($year, $month, $time, $filename){
      $path = public_path()."/uploads/".$year."/".$month."/".$time."/".$filename".jpg";
      // Should equate to: "/uploads/2015/01/142064476110377625_673554946025652_6686347512849117388_n.jpg
      return Response::download($path, 'image.jpg');
    }
    

    理论上应该可以满足您的需求。可能需要修改路径以满足您的需要,但这应该是一般的想法。测试一下,让我知道它是否有效。

    注意

    这不是处理下载的最佳方式,因为您需要知道所需文件的确切文件名,但它为您指明了正确的方向。

    【讨论】:

    • 这只有在他首先将文件移动到 Laravel 的公共 web 目录中的上传文件夹时才有效。那是他没有做的。
    • 是的,所以他必须先使用你的答案。我确实在那里写了“可能需要修改路径以满足您的需求,但是......”所以我确实解决了这个问题。
    • 实际上,如果他删除public_path()(或在上传时添加),它应该可以工作但是如果它在公共目录中,则不需要下载路径(除非你想要强制下载)跨度>
    • 嗯。有趣的。因此,取决于您实际保存文件的位置,决定了如何访问它以进行下载。很高兴知道。
    • 是的。对于公开的所有内容,您只需链接到实际文件即可。其他文件需要通过读取文件的路由访问
    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2017-01-23
    • 2015-01-11
    相关资源
    最近更新 更多