laravel 如何从后端检索图片

rkkpypqq  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(108)

前端是另一个服务器,并向后端(Laravel)发出API调用,现在我想向前端发送一张图片,并使用vanilla js显示它(我不知道jQuery,我是后端开发人员)。
图片必须只提供给经过身份验证的用户,所以我想符号链接不是一个选择。

信息:

在前端,它只在浏览器开发工具的控制台中显示二进制内容,而且
抛出以下错误:

“DOMException:无法在“Window”上执行“btoa”:要编码的字符串包含Latin 1范围之外的字符。"

我可以看到我的图片成功上传到storage/path/to/pic。

Laravel控制器方法:

public function getAvatar(GetAvatarRequest $request): string
{
    // some code...
    //..
    //..
    return response()->file(base_path() . '/storage/app/images/avatars/1.jpeg', ['Content-Type' => 'Image/jpeg']);

    // Also tried these but no luck
    // return response()->download(Storage::disk('local')->get('images/avatars/1.jpeg'), 'name', ['Content-Type' => 'Image/jpeg']);

    // return Storage::disk('local')->get('images/avatars/1.jpeg');

    // return response()->file(Storage::disk('local')->get('images/avatars/1.jpeg'));
}

字符串

我是这样存储收到的图片的:

Storage::putFileAs('images/avatars/', $request->avatar, $request->accountId, 'private');

后端响应处理的js:

let token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
let myRequest = new Request('/backend/pic');

let myHeaders = new Headers();
myHeaders.append("Accept", "application/json, text-plain, */*");
myHeaders.append("X-Requested-With", "XMLHttpRequest");
myHeaders.append("X-CSRF-TOKEN", token);
myHeaders.append("Content-Type", 'image/jpeg/jpg');

let init = {
    method: 'GET',
    mode: 'cors',
    credentials: 'same-origin',
    headers: myHeaders,
};

fetch(myRequest, init).then((response) => {
    console.log(response);
    return getBody(response);
}).then((data) => {
    console.log(data);
    createAppendElm('img', {
        'src': 'data:image/jpeg;base64,' + btoa(data),
        'alt': 'alternative'
    }, getElm('box'));
});

function getBody(response) {
    const contentType = response.headers.get("content-type");

    if (contentType && contentType.indexOf("application/json") !== -1) {
        return response.json();
    } else {
        return response.text();
    }
}


我的猜测是我的JavaScript没有正确处理响应,所以有什么建议吗?

42fyovps

42fyovps1#

我使用了Cloudinary库,它对初学者非常友好,应该不难理解。

相关问题