Как сохранить бинарный образ из ответа json в корзину S3 - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь сохранить JPEG, полученный от Microsoft Graph API , в корзину S3 (фактически, Digital Ocean Space, но они работают одинаково).Я могу получить двоичное изображение из графика 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;
};

Есть мысли о том, что я делаю неправильно?

1 Ответ

1 голос
/ 18 апреля 2019

Где вы указываете контент-тип данных, которые запрашиваете по вашему axios звонку?

По умолчанию используется значение application/json, а не binary/octet-stream, поэтому данные изображения будут подвергаться нежелательному преобразованию. ;)

Добавление responseType: 'stream' к вашему запросу axios должно исправить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...