【问题标题】:Laravel 5 Flysystem - download file from remote diskLaravel 5 Flysystem - 从远程磁盘下载文件
【发布时间】:2015-05-29 18:59:35
【问题描述】:

我正在使用 Flysystem 在 Rackspace 上存储一个站点的文件。上传没问题,无法弄清楚如何开始下载文件 - 这是我尝试过的

Storage::disk('rackspace');
return response()->download('file-library/' . $file->filename);

结果是找不到文件。添加 Storage::disk() 是否足以让 Laravel 在这个位置而不是在本地查看?实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: php laravel laravel-5 flysystem


    【解决方案1】:

    Frank 来自 Flysystem。

    执行此操作的首选方法是将 readStream 输出与 Response::stream 结合使用。

    <?php
    
    $fs = Storage::disk('diskname')->getDriver();
    $stream = $fs->readStream($file);
    
    return Response::stream(function() use($stream) {
        fpassthru($stream);
    }, 200, [
        "Content-Type" => $fs->getMimetype($file),
        "Content-Length" => $fs->getSize($file),
        "Content-disposition" => "attachment; filename=\"" . basename($file) . "\"",
    ]);
    

    $fsLeague\Flysystem\Filesystem 实例。我相信有一种方法可以在 Laravel 提供的文件系统类中检索这个实例。

    【讨论】:

    • 嗨弗兰克,谢谢 - 是否可以使用已知在 Laravel 中工作的示例进行更新?我对与 Laravel 相关的 Filesystem 实例感到很困惑
    • 我已经在第一行添加了。
    • 我可以确认这在 Lumen 中有效,看不出它在 Laravel 5 中无效的任何原因
    • 这个例子在 Laravel 5.2 中似乎不起作用。我得到Call to undefined method Illuminate\Http\Response::stream()。寻找修复。编辑:使用具有相同参数的response()-&gt;stream(...)。哦
    • @DanielBuckmaster 或使用 streamDownload
    【解决方案2】:

    添加Storage::disk() 是否足以让 Laravel 在此位置而不是本地查看?

    不,这不会影响response()-&gt;download() 的通话。

    这样的事情应该可以工作:

    return response()->download(Storage::disk('rackspace')->get('file-library/' . $file->filename));
    

    【讨论】:

    • is_file() expects parameter 1 to be a valid path, string given。下载的第一个参数是路径(字符串)
    • @NightMICU 我猜你可能不得不把它拉到一个临时文件中。或者只是将用户直接链接到 Rackspace 的存储。
    • @ceeyaoz 似乎很奇怪,他们不会想到这一点。我想避免弄乱临时文件(我的想法是让所有此类文件远离我的本地文件系统),并希望在用户不离开当前页面的情况下启动下载。
    • @NightMICU 每当我需要做这种事情时,我都会将用户重定向到 AWS S3 签名的 URL 以进行下载。完全没有理由以这种方式让 Web 服务器参与下载。更具可扩展性、更快、更轻松。
    • @NightMICU 我不使用 Rackspace,但他们似乎有类似的系统。 docs.rackspace.com/files/api/v1/cf-devguide/content/…
    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 2023-03-27
    • 2020-11-27
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多