4

申し訳ありませんが、私は初心者ですが、mongodb ステッチをバックエンドとして使用してクエーサー フロントエンドを構築しています。

ステッチ JavaScript SDK と AwsRequest.Builder を使用して画像をアップロードしようとしています。

Quasar は、base64 でエンコードされたデータを含む画像オブジェクトを提供してくれます。

base64 文字列 (「data:image/jpeg;base64,」と書かれている部分) からヘッダー文字列を削除し、バイナリに変換して aws s3 バケットにアップロードします。

データを正常にアップロードできます。もう一度ダウンロードすると、アップロードした正確なバイト数が取得されるため、aws S3 へのステッチを介した往復は機能しているようです。

ただ、アップロードした画像は S3 で開くことも、ダウンロードした後も開くこともできません。

問題は、base64 文字列のバイナリへの変換や、stitch の適切なアップロード パラメータの選択にあるようです。

これが私のコードです:

      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.

また、バニラの atob() 関数や BUFFER npm モジュールなど、base64 文字列をバイナリに変換する他の方法も試しましたが、うまくいきませんでした。

どこかでバカなことをしているに違いないが、抜け道が見つからない。

4

2 に答える 2