【问题标题】:How to save binary image from json response to S3 bucket如何将二进制图像从 json 响应保存到 S3 存储桶
【发布时间】:2019-04-17 22:10:35
【问题描述】:

我正在尝试将我从Microsoft's 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;
};

对我做错了什么有什么想法吗?

【问题讨论】:

  • 可能想检查 isBase64Encoded 是否为假,因为你没有对图像进行编码,据我所知。

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


【解决方案1】:

您在哪里指明您通过axios 调用请求的数据的内容类型?

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

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

【讨论】:

  • 太棒了,这解决了它。谢谢您的帮助! :)
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 2018-03-11
相关资源
最近更新 更多