javascript - 如何将二进制图像从 json 响应保存到 S3 存储桶
问题描述
我正在尝试将从Microsoft 的 Graph API返回的 jpeg 保存到 S3 存储桶(实际上是数字海洋空间,但它们的工作方式相同)。我能够从图形 api 获取图像二进制文件。并且可以成功上传。但是图像在端点处是乱码。这是我用作参考的代码。
// Prep to fetch user photo from microsoft office 365
// using recently aquired access token
const photoEndpoint = `${MS_GRAPH_URL}/v1.0/me/photo/$value`;
const config = { headers: { Authorization: `Bearer ${access_token}` } };
// Fetch user photo from microsoft office 365
const { data: photo } = await axios.get(photoEndpoint, {
headers: { Authorization: `Bearer ${access_token}` }
});
await storeImage(photo, id);
其中storeImage
定义如下:
// Import AWS SDK
const AWS = require("aws-sdk");
// Instantiate s3 instance to iterface with digital ocean spaced
const spacesEndpoint = new AWS.Endpoint("sfo2.digitaloceanspaces.com");
const s3 = new AWS.S3({
endpoint: spacesEndpoint,
accessKeyId: process.env.DO_SPACE_KEY,
secretAccessKey: process.env.DO_SPACE_SECRET
});
const storeImage = (image, key) => {
const params = {
ACL: "public-read",
Bucket: process.env.DO_SPACE_BUCKET,
Key: `${key}`,
Body: image,
ContentType: "image/jpeg"
};
const promise = new Promise((resolve, reject) => {
s3.upload(params, (err, data) => {
if (err) reject(err);
resolve(data);
});
});
return promise;
};
关于我做错了什么有什么想法吗?
解决方案
您在哪里指明您通过axios
呼叫请求的数据的内容类型?
默认值似乎application/json
不是,binary/octet-stream
因此您的图像数据将经历不需要的转换。;)
添加responseType: 'stream'
到您的 axios 请求应该可以解决您的问题。
推荐阅读
- java - 图像未在 JavaFX 中显示
- python - 如何处理其数据中包含 \x00(或 \u0000)的 API 响应(JSON),并使用 django 模型将数据存储在 Postgres 中?
- javascript - 尝试访问远程服务器时,React-native fetch 失败并显示“网络请求失败”
- python - 当我尝试创建新项目时,项目类型未在 python 中显示
- python - Cron 日志显示 sh: 1: hdfs: not found
- machine-learning - 一维卷积CNN Keras
- r - 如何在 R 中自定义选择截取并重新排列模型输出的顺序?
- r - 具有不同值标签的闪亮滑块文本输入或滑块输入
- python - 使用 Python 置换 .txt 文件
- github - Github 页面已发布但没有显示