javascript - AWS S3 获取不是有效的位图文件

标签 javascript image amazon-s3 blob cordova-plugins

我已经为此苦苦挣扎了一段时间,我将向您提供尽可能多的信息(有些可能不相关),因为我完全被困住了。我正在使用 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

我试图在文本编辑器中打开每一个以查看发生了什么。对于第一个(坏掉的)我得到这个:

enter image description here

当我尝试在文本编辑器中打开工作时,我得到了这个:

enter image description here

现在看起来像是一个转换问题,但我认为我正在正确转换它。 这是我用来上传的代码(您可以在帖子后面看到 console.logs):

enter image description here

核心.js

enter image description here

awsServices.js

enter image description here

如果您查看代码中的注释,我标记了一些控制台日志。我将在此处显示它们以获取更多信息:

A - (uploadToAWS):

A (uploadToAWS)

B - (awsServices.upload):

B (awsServices.upload)

这就是我将 dataURI 转换为 Blob 的方式(在 uplpoadToAWS 中调用 - 第一个屏幕截图):

enter image description here

这是在上面的代码中传递到“dataURI”参数的内容: enter image description here

如果有更多信息,请告诉我。一段时间以来,我一直在摸不着头脑。任何帮助表示赞赏。谢谢!

最佳答案

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/

相关文章:

javascript - 如何用html5 canvas元素绘制透明图片

javascript - 与两个 API(nodejs、Angular、express、mysql)的关系

ios - 包括 Split View在内的整个屏幕的 Swift iOS 屏幕截图

java - 如何使用 javamail 将 base64 图像嵌入到电子邮件中

python - 无法将图像加载到 pygame 显示

javascript 未从 html 文档加载

javascript - Google App 引擎 Nodejs Puppeteer 中的全局变量

c# - 什么是 C# 中的处置对象?

maven - 如何将 WAR 文件从 s3 部署到 AWS EC2?

c++ - 如何在 64 位 Solaris 上安装 AWS C++ SDK 库