首页 > 解决方案 > 使用 Laravel 将 blob 作为文件存储在 S3 中

问题描述

我在 Vue 中使用文件上传插件通过 API 上传一些图像和 pdf 文件,并且它可以选择在上传文件时创建一个 blob 字段。

发送给 Laravel 的请求如下。我可以通过在浏览器上复制和粘贴 URL 来从浏览器访问 blob。

斑点数组

在服务器端代码上,我尝试使用以下代码保存文件,但保存的文件是一些损坏的 64 字节文件,而不是实际图像。我们如何将 blob 作为普通文件存储在文件系统中?

if ($request->has('files')) {
        $files = $request->get('files');

        $urls = [];
        foreach ($files as $file) {
            $filename = 'files/' . $file['name'];

            // Upload File to s3
            Storage::disk('s3')->put($filename, $file['blob']);
            Storage::disk('s3')->setVisibility($filename, 'public');

            $url = Storage::disk('s3')->url($filename);
            $urls[] = $url;
        }

        return response()->json(['urls' => $urls]);
    }

标签: phplaravelvue.jsblob

解决方案


尝试替换这个:

Storage::disk('s3')->put($filename, $file['blob']);

有了这个:

Storage::disk('s3')->put($filename, base64_decode($file['blob']));

推荐阅读