通过javascript AWS sdk将图像上传到S3会导致'[object object]'字符串

时间:2019-03-21 14:35:47

标签: javascript amazon-web-services amazon-s3 ionic3 aws-sdk

在遵循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仿真器运行代码。 / p>

我很确定在执行上传操作时,我将错误类型的对象传递给Body属性,但是我不知道应该是什么。 AWS文档说它应该接受Blob的类型,但是我的getFile方法返回一个File,它显然是Blob的一个实例,所以我认为它应该可以正常工作?

1 个答案:

答案 0 :(得分:1)

看起来像GetFile方法返回File对象,而不是Blob。 所以什么时候写:

Body: file,

您实际上是在传递那个JS对象,而不是Blob。 这是一个对象的证明是file.name确实返回了名称。

我建议您查看fileEntry.file的文档,以检查如何从返回的File对象访问字节数组。

来自Cordova documentation

file: Creates a File object containing file properties.

也许FileReader会帮助您实际读取文件。 https://cordova.apache.org/docs/en/1.8.1/cordova/file/filereader/filereader.html