Загрузка изображений на s3 через сервис stitch aws завершается неудачно - PullRequest
3 голосов
/ 30 марта 2019

Извините, я новичок, но я строю квазар-фронтенд, используя стежок mongodb в качестве бэкенда.

Я пытаюсь загрузить изображение с помощью javascript sdks и AwsRequest.Builder.

Квазар дает мне объект изображения с данными, закодированными в base64.

Я удаляю строку заголовка из строки base64 (часть, которая говорит «data: image / jpeg; base64,»), я конвертирую ее в двоичный файл и загружаю в корзину aws s3.

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

Только загружаемое изображение не может быть открыто в S3 и не может быть открыто после загрузки.

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

Вот мой код:

      var fileSrc = file.__img.src  // valid base64 encoded image with header string
      var fileData = fileSrc.substr(fileSrc.indexOf(',') + 1) // stripping out header string
      var body = BSON.Binary.fromBase64(fileData, 0) // here I get the BSON error

      const args = {
        ACL: 'public-read',
        Bucket: 'elever-erp-document-store',
        ContentType: file.type,
        ContentEncoding: 'x-www-form-urlencoded', // not sure about the need to specify encoding for binary file
        Key: file.name,
        Body: body
      }

      const request = new AwsRequest.Builder()
        .withService('s3')
        .withRegion('eu-west-1')
        .withAction('PutObject')
        .withArgs(args)

      aws.execute(request.build())
        .then(result => {
          alert('OK ' + result)
          return file
        }).catch(err => {
          alert('error ' + err)
        })

В приведенном выше фрагменте я пытаюсь использовать BSON.Binary.fromBase64 для преобразования в двоичный файл согласно предложению Хейли ниже, но я получаю следующую ошибку:

boot_stitch__WEBPACK_IMPORTED_MODULE_3__["BSON"].Binary.fromBase64 is not a function.

Я также пробовал другие способы преобразования строки base64 в двоичную, например, функцию vanilla atob () и модуль BUFFER npm, но безрезультатно.

Я, должно быть, где-то делаю глупости, но не могу найти выход.

1 Ответ

0 голосов
/ 05 апреля 2019

Вы должны быть в состоянии преобразовать изображение base64 в BSON.Binary и затем загрузить фактическое изображение таким образом (у меня есть некоторые значения, жестко запрограммированные, но вы можете заменить их):

context.services.get("<aws-svc-name>").s3("<your-region>").PutObject({
    Bucket: 'myBucket',
    Key: "hello.png",
    ContentType: "image/png",
    Body: BSON.Binary.fromBase64("iVBORw0KGgoAA... (rest of the base64 string)", 0),
})
...