在 Laravel 中下载 S3 文件链接

Nit*_*mar 3 laravel laravel-storage laravel-5.6

我正在尝试在VueJs前端和Laravel后端构建一个小型应用程序,我将管理部分中aws-s3的文件上传到我的同时上传我将该文件的链接存储在数据库中的文件。每个操作都由 api 调用维护,现在我想为我的最终用户提供这些下载的选项,所以我正在进行 axios 调用,如下所示:

downloadPDF(docs){
    const documents = {
        document: docs
    }
    axios.post('api/documents-download', documents, {headers: getHeader()}).then(response => {
        if(response.status === 200)
        {
            console.log('Downloaded')
        }
    })
},
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有这样的事情:

public function download(Request $request)
{
    $headers = [
        'Content-Type' => 'application/pdf',
        'Content-Description' => 'File Transfer',
        'Content-Disposition' => "attachment; filename=filename.pdf",
    ];

    return response()->download($request->document, 'filename.pdf', $headers);
}
Run Code Online (Sandbox Code Playgroud)

但它抛出了我的错误:

文件“ https://s3-us-west-2.amazonaws.com/noetic-dev/2_Project/shiven-affordable-housing-surat/3_Document/Form+1/Form1.pdf ”不存在

这个文件显然存在并公开,因为你可以在上面看到 url 显示文档为链接。

帮我解决这个问题。谢谢

Sal*_*far 6

我记得在我的项目中实现了这个..让我与您分享一个示例代码...Laravel 已经s3Storage文档中提供了有关的详细信息

代码:

use Illuminate\Support\Facades\Response as Download;

public function download_config(Config $config)
    {
        $headers = [
            'Content-Type'        => 'Content-Type: application/zip',
            'Content-Disposition' => 'attachment; filename="'. $config->name .'"',
        ];

        return Download::make(Storage::disk('s3')->get($config->path), Response::HTTP_OK, $headers);
    }
Run Code Online (Sandbox Code Playgroud)

我假设您可能会将$config->path其(文件路径)存储在您的数据库中。要了解更多信息,您可以访问


Ale*_*ich 5

这段代码很适合从 Laravel 7 中的 S3 下载:

// $filePath should look like this: some-directory/filename.zip
return redirect(Storage::disk('s3')->temporaryUrl(
                    $filePath,
                    now()->addHour(),
                    ['ResponseContentDisposition' => 'attachment']
                ));
Run Code Online (Sandbox Code Playgroud)

归功于:https : //sutherlandboswell.com/force-file-download-from-aws-s3-in-laravel/