[英]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.