繁体   English   中英

如何从后端检索图片

[英]How can I retrieve a picture from back-end

前端是另一台服务器,对后端(Laravel)进行 API 调用,现在我想将图片发回前端并用 vanilla js 显示(我不知道 jquery,我是后退- 终端开发人员)。
图片必须只对经过身份验证的用户可用,所以我想符号链接不是一个选项。

信息:
在前端,它只在浏览器开发者工具的控制台中显示二进制内容,并且
抛出以下错误: “DOMException:无法在‘Window’上执行‘btoa’:要编码的字符串包含 Latin1 范围之外的字符。”
我可以在 storage/path/to/pic 中看到我的图片已成功上传。

这是 Laravel controller 方法:

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 没有正确处理响应,所以有什么建议吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM