我一直在尝试重新实现一个 HTML5 图像上传器,就像 Mozilla Hacks 网站上的 那个,但它适用于 WebKit 浏览器。部分任务是从 canvas
对象中提取图像文件并将其附加到 FormData 对象以进行上传。
问题在于,虽然 canvas
具有 toDataURL
函数来返回图像文件的表示形式,但 FormData 对象仅接受来自 File API 的 File 或 Blob 对象。
Mozilla 解决方案在 canvas
上使用了以下 Firefox-only 功能:
var file = canvas.mozGetAsFile("foo.png");
…这在 WebKit 浏览器上不可用。我能想到的最佳解决方案是找到某种方法将 Data URI 转换为 File 对象,我认为这可能是 File API 的一部分,但我一生都找不到这样做的东西。
可能吗?如果没有,还有其他选择吗?
原文由 Stoive 发布,翻译遵循 CC BY-SA 4.0 许可协议
在玩了几件事之后,我设法自己解决了这个问题。
首先,这会将 dataURI 转换为 Blob:
从那里,将数据附加到表单以便将其作为文件上传很容易: