php - 使用 axios 上传到 AWS S3 时图像文件不正确
问题描述
我是使用 AXIOS 的新手。目前,我正在开发结合 AXIOS 代码的 laravel 框架。
我使用 axios 代码获取图像 URL 并将其存储到 AWS S3 中。我可以将图像存储到 S3 中,但图像文件不正确。图像文件只是一个图标图像。不是来自图像 URL 的图像。
这是代码
axios.get('https://www.instagram.com/p/B_zZCRpB895/media/?size=t', { responseType: "blob" })
.then(function (response) {
var reader = new window.FileReader();
reader.readAsDataURL(response.data);
reader.onload = function () {
var imageDataUrl = reader.result;
var params = {
Bucket: 'thumbnail',
Key: 'shortlist/image.jpg',
Body: imageDataUrl
};
s3.upload(params, function (err, data) {
console.log('result:');
console.log(err, data);
console.log('\n');
var s3url = data.Location;
console.log('s3 url: ' + s3url);
});
}
});
代码 var imageDataUrl = reader.result;
返回此结果
image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/7QB8UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAF8cAigAWkZCTUQyMzAwMDk2OTAxMDAwMDhiMDMwMDAwNmEwNDAwMDA2OTA1MDAwMDg1MDkwMDAwODQwYjAwMDBmMzBjMDAwMDQ1MGYwMDAwZjUxMDAwMDBiMzEyMDAwMAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wgARCACWAJYDACIAAREBAhEB/8QAHAAAAQUBAQEAAAAAAAAAAAAABgADBAUHAgEI/8QAGgEAAgMBAQAAAAAAAAAAAAAAAgQAAQMFBv/aAAwDAAABEAIQAAAAz+DZVIFDELgbKuHOUJu2FVowaVxHp5uk7kcrV/cNvm0d+n8GZW05wWLnedGi2Ee6r06pYiPk45cCDwqqsJi7TzW5Hu2ZNqKHQMSEBI1mSrmfyUoc5KheDnWo5Lr3U47UWdHsK9OqWEUd9UXLHgeg4wM8m+66anoY1b8zqll/h2wyFkWk9DWrHq3ogqjijvurw..........
如何使用正确的图像文件将该结果图像上传到 S3?
请帮忙
解决方案
您必须将 base64 图像转换为 blob,然后使用流上传到 S3:
...
var imageDataUrl = reader.result;
fetch(imageDataUrl)
.then(res => res.blob())
.then(blob => {
//blob is your binary file
var params = {
Bucket: 'thumbnail',
Key: 'shortlist/image.jpg',
Body: blob
};
s3.upload(params, function (err, data) {
console.log('result:');
console.log(err, data);
console.log('\n');
var s3url = data.Location;
console.log('s3 url: ' + s3url);
});
})
推荐阅读
- python - 为什么-1会在pandas dataframe中导致关键错误重置其索引以及如何使其工作
- javascript - 在 Web 组件布局中添加/删除项目的标准方法是什么?
- html - Jekyll Kramdown 保留新线路
- angular - 如何将我的 ionic 应用程序连接到同一页面中的两个不同 API URL?如何将 id 从第一个 url 的数据传递到第二个 url?
- swift - 为什么 ~= 不适用于枚举和字符串?
- python - Python 在 Visual Studio Code 上无法正常运行
- angular - 为什么主题订阅在 Angular 9 中不起作用
- c# - 如果并行调用不同数量的线程,为什么我会得到不同的总和?
- python - 如何使用re分别提取重复数据
- php - 如何根据数据库值显示特定的 div?