我已经为此苦苦挣扎了一段时间,我将向您提供尽可能多的信息(有些可能不相关),因为我完全被困住了。我正在使用 Ionic,我希望能够用我的手机拍照并将其上传到 AWS S3 存储桶。我用了Cordova camera来完成这个。
据我所知;这些图片以大型 base64 字符串形式输出,我必须将其转换为 Blob,再将其转换为 File 对象,然后将该文件对象上传到 AWS。但是,当我这样做时,它总是将其作为图像以外的其他内容上传。每当我打开它时,我都会收到一条错误消息:
"Not a valid bitmap file. its format is not currently supported."
https://s3.amazonaws.com/mng-moment/moment/PA/40.008446_-75.26046_1502414224619.jpg
这是一个正在工作的例子(这曾经工作但不知何故坏了):
https://s3.amazonaws.com/mng-moment/bestMoments/40.008446_-75.26046_1499659199473.jpg
我试图在文本编辑器中打开每一个以查看发生了什么。对于第一个(坏掉的)我得到这个:
当我尝试在文本编辑器中打开工作时,我得到了这个:
现在看起来像是一个转换问题,但我认为我正在正确转换它。 这是我用来上传的代码(您可以在帖子后面看到 console.logs):
核心.js
awsServices.js
如果您查看代码中的注释,我标记了一些控制台日志。我将在此处显示它们以获取更多信息:
A - (uploadToAWS):
B - (awsServices.upload):
这就是我将 dataURI 转换为 Blob 的方式(在 uplpoadToAWS 中调用 - 第一个屏幕截图):
如果有更多信息,请告诉我。一段时间以来,我一直在摸不着头脑。任何帮助表示赞赏。谢谢!
最佳答案
如 MDN File API 中所述:
A File object is a specific kind of a Blob, and can be used in any context that a Blob can. In particular, FileReader, URL.createObjectURL(), createImageBitmap(), and XMLHttpRequest.send() accept both Blobs and Files.
因此,我认为您的问题出在您的uploadToAws 函数中,因为您首先创建了一个 Blob,然后使用该 Blob 创建了一个文件,而我认为您应该简单地使用字节初始化 File 对象dataURItoBlob 返回的数组,因为 File 对象实际上已经是一个 Blob 对象。
关于javascript - AWS S3 获取不是有效的位图文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45626242/