将数据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
提交
取消
