【问题标题】:Laravel 4.2,save and access files inside storage folderLaravel 4.2,保存和访问存储文件夹中的文件
【发布时间】:2017-08-28 16:16:42
【问题描述】:

我正在做一个 laravel 4.2 项目,我应该上传视频,将它们保存在存储文件夹中,然后将它们显示在用户可以播放这些视频的页面中。保存的第一部分视频已完成,但问题是获取文件。

我到处找,不像 laravel 5.x,似乎没有明确的方法来访问存储文件夹和获取文件(甚至不能使用 Storage::get)。

作为一个简单的测试示例,我从存储文件夹中链接一个简单的图像开始,仍然不起作用。我尝试了 url 函数(刀片)

<img src="{{url('code/app/storage/files/videos/gg.jpg') }}"/>

浏览器编译时给出这一行:

&lt;img src="http://dr.test/userptl/code/app/storage/files/videos/gg.jpg"/>

路径code/app/storage/files/videos/gg.jpg是正确的,但还是无法访问图片。

storage_path() 无法使用,因为它从根生成完整路径,这是不正确的。

有没有办法解决这个问题?

【问题讨论】:

  • php artisan storage:link 这将为您创建一个从 public/storage 到 storage/app/public 的符号链接。现在 /storage/app/public 中的任何文件都可以通过如下链接访问:somedomain.com/storage/gg.jpg

标签: laravel video laravel-4 html5-video storage


【解决方案1】:

当您上传文件时,它会存储在临时文件夹中。您必须将其移动到可公开访问的文件夹,例如。 $file = $request->file('file'); \Storage::put($path.'/'.$newFilename, file_get_contents($file));

您可能需要在 storage 和 public 之间建立一个符号链接,以使这些文件可以访问。

【讨论】:

    【解决方案2】:

    如果你不使用

    php artisan storage:link
    

    将以下代码添加到您的路由器:

    Route::get('storage/{filename}', function ($filename)
    {
        $path = storage_path('public/' . $filename);
    
        if (!File::exists($path)) {
            abort(404);
        }
    
        $file = File::get($path);
        $type = File::mimeType($path);
    
        $result = Response::make($file, 200);
        $result->header("Content-Type", $type);
    
        return $result;
    });
    

    那么在视图中你可以像这样使用:

    <img src="{{ asset("storage/gg.jpg")}}"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-02
      • 2018-03-20
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多