При загрузке изображения с предварительно заданным URL-адресом в Google Cloud Storage изображение загружается неправильно (MERN + React Native) - PullRequest
0 голосов
/ 19 апреля 2020

Я могу сгенерировать подписанный URL-адрес со своего сервера и отправить его обратно в свой клиент React Native (expo).

Клиент также может отправить запрос на размещение в SignUrl с объектом изображения, который включает в себя URI для изображения, хранящегося на устройстве.

Проблема в том, что изображение, сохраненное в Google Cloud, выглядит поврежденным. Я предполагаю, что должны быть дополнительные настройки, которые я должен добавить, чтобы изображение загружалось правильно.

Код сервера для генерации URL

const { Storage } = require("@google-cloud/storage");
const storage = new Storage({keyFilename: "keys.json"});
const bucketName = "bucket";
const bucket = storage.bucket(bucketName);
const { v4 } = require("uuid");

async upload(req, res, next) {
const options = {
        action: "write",
        expires: Date.now() + 15 * 60 * 1000, // 15 minutes,
        contentType: "image/jpeg"
      };
const fileName = `1234/${v4()}.jpg`
const [url] = await bucket.file(fileName).getSignedUrl(options);
res.send(url)
}

Пример предварительно назначенного URL с сервера

const url = "https://storage.googleapis.com/bucket/1234/00bae114-87e4-4647-94d3-31115453e9bd.jpg?GoogleAccessId=id%40num.iam.gserviceaccount.com&Expires=1587297408&Signature=signaturecode"

Пример объекта изображения

const image = {
  "name": "IMG_4831.JPG",
  "type": "image/jpeg",
  "uri": "assets-library://asset/asset.JPG?id=AC24211D-E728-44D2-8B00-29EF04EC74E0&ext=JPG"
}

Реагирует на собственный код для отправки изображения по заданному URL-адресу

import axios from "axios";
const image = {uri, type: "image/jpeg", name };

await axios.put(url, image, {
        headers: { "Content-Type": "image/jpeg" }
      });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...