javascript - 如何将 json 响应中的二进制图像保存到 S3 存储桶

标签 javascript node.js amazon-s3 microsoft-graph-api digital-ocean

我正在尝试保存从 Microsoft's Graph API 返回的 jpeg到 S3 存储桶(实际上是 digital ocean 空间,但它们的工作原理相同)。我可以从图形 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 调用请求的数据的 Content-Type?

默认值似乎是application/json,而不是binary/octet-stream,因此您的图像数据将经历不需要的转换。 ;)

responseType: 'stream' 添加到您的 axios 请求中应该可以解决您的问题。

关于javascript - 如何将 json 响应中的二进制图像保存到 S3 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736637/

相关文章:

javascript - 使用 jQuery 更改当前页面链接的 CSS

删除节点后的javascript事件处理程序

javascript - 检查 div 是否存在

javascript - Laravel 星级评分,字体很棒

使用 JWT 的 Angularjs 在登录时将 CORS 中断到 Amazon S3

node.js - 在 docker build 期间,Ubuntugis 安装在配置期间卡住

node.js - 为什么 preload.js 返回 "ERROR: module not found"?

javascript - pug 变量未在 href 标签上求值

php - amazon-s3-php-class - 如何更改权限

amazon-web-services - 安装在 EC2 服务器中时适用的 Amazon S3 Bucket 数据传输费用?