将数据URI转换为文件,然后追加到FormData我一直在尝试重新实现HTML 5映像上传器论Mozilla的黑客行为站点,但它适用于WebKit浏览器。部分任务是从canvas对象并将其附加到FormData对象进行上载。问题是canvas有toDataURL函数返回图像文件的表示形式,FormData对象只接受来自文件API.Mozilla解决方案在canvas:var file = canvas.mozGetAsFile("foo.png");.这在WebKit浏览器上是不可用的.我能想到的最好的解决方案是找到一些方法将数据URI转换为File对象,我认为它可能是FileAPI的一部分,但在我的一生中,我无法找到这样的方法。有可能吗?如果没有,还有其他选择吗?谢谢。
4 回答
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
function dataURItoBlob(dataURI) { var byteString = atob(dataURI.split(',')[1]); var ab = new ArrayBuffer(byteString.length); var ia = new Uint8Array(ab); for (var i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } return new Blob([ab], { type: 'image/jpeg' });}
慕森卡
TA贡献1806条经验 获得超8个赞
dataURLtoBlob()
function dataURLtoBlob(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while(n--){ u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], {type:mime});}
var dataurl = canvas.toDataURL('image/jpeg',0.8);var blob = dataURLtoBlob(dataurl);var fd = new FormData(); fd.append("myFile", blob, "thumb.jpg");
HTMLCanvasElement.prototype.toBlob
if(!HTMLCanvasElement.prototype.toBlob){ HTMLCanvasElement.prototype.toBlob = function(callback, type, encoderOptions){ var dataurl = this.toDataURL(type, encoderOptions); var bstr = atob(dataurl.split(',')[1]), n = bstr.length, u8arr = new Uint8Array(n); while(n--){ u8arr[n] = bstr.charCodeAt(n); } var blob = new Blob([u8arr], {type: type}); callback.call(this, blob); };}
canvas.toBlob()
canvas.toBlob( function(blob){ var fd = new FormData(); fd.append("myFile", blob, "thumb.jpg"); //continue do something... }, 'image/jpeg', 0.8);
添加回答
举报
0/150
提交
取消