通过 javascript AWS sdk 将图像上传到 S3 会产生“[object object]”字符串

uploading an image to S3 via javascript AWS sdk results in '[object object]' string

通过关注 this tutorial,我尝试使用以下代码将图像从我的离子应用程序上传到 amazon s3 存储桶:

uploadFile(filePath) {
    console.log('uploading: ', filePath);
    this.getFile(filePath).subscribe((file) => {
       console.log('file is', file);

       this.s3.upload({
          Key: file.name,
          Bucket: this.bucketName,
          Body: file,
          ACL: 'public-read'
        }, (err, data) => {
           console.log('error', err);
           console.log('data', data);
     })
   });
}

getFile(filePath):Observable<any> {
  return Observable.create((obs) => {
    (<any>window).resolveLocalFileSystemURL(filePath,(fileEntry) => {
      fileEntry.file((fileObject) => {
        obs.next(fileObject);
      })
    })
  });
}

这可以很好地连接到 aws,但它上传的文件只是一个包含 [object object] 的文本文件,而不是 jpeg 图像数据。对于上下文,filePath 参数被传递给通过 Ionic 3 @ionic-native/camera 库生成的图像的文件路径,我是 运行 通过 android 模拟器生成的代码,如果这有什么不同的话。

我很确定我在上传时向 Body 属性 传递了错误类型的对象,但我不知道它应该是什么. AWS 文档说它应该接受 Blob 的类型,但是我的 getFile 方法 returns a File 显然是 Blob 的一个实例,所以我想应该没问题吧?

看起来 GetFile 方法 return 是一个 File 对象而不是 blob。 所以什么时候,你写:

Body: file,

您实际上传递的是 JS 对象,而不是 blob。 这是一个对象的证据是 file.name 实际上 return 一个名字。

我建议您查看 fileEntry.file 的文档,了解如何从 File 对象访问字节数组 returned.

来自科尔多瓦documentation

file: Creates a File object containing file properties.

也许 FileReader 会帮助您真正阅读该文件。 https://cordova.apache.org/docs/en/1.8.1/cordova/file/filereader/filereader.html