将数据URI转换为文件,然后追加到FormData

我一直在尝试重新实现HTML5图像上传程序,例如MozillaHacks网站上的HTML5图像上传程序,但是它可以与WebKit浏览器一起使用。任务的一部分是从canvas对象中提取图像文件,并将其附加到FormData对象以进行上传。

问题在于,虽然canvas具有toDataURL返回图像文件表示形式的功能,但FormData对象仅接受FileAPI中的 File或Blob对象。

Mozilla解决方案在Firefox上使用了以下仅Firefox功能canvas

var file = canvas.mozGetAsFile("foo.png");

…在WebKit浏览器上不可用。我能想到的最好的解决方案是找到一种将Data URI转换为File对象的方法,我认为这可能是File

API的一部分,但是我一生都找不到能够做到这一点的方法。

可能吗?如果没有,还有其他选择吗?

谢谢。

回答:

在玩了几件事之后,我设法自己弄清楚了。

首先,这会将dataURI转换为Blob:

function dataURItoBlob(dataURI) {

// convert base64/URLEncoded data component to raw binary data held in a string

var byteString;

if (dataURI.split(',')[0].indexOf('base64') >= 0)

byteString = atob(dataURI.split(',')[1]);

else

byteString = unescape(dataURI.split(',')[1]);

// separate out the mime component

var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];

// write the bytes of the string to a typed array

var ia = new Uint8Array(byteString.length);

for (var i = 0; i < byteString.length; i++) {

ia[i] = byteString.charCodeAt(i);

}

return new Blob([ia], {type:mimeString});

}

从那里,将数据附加到表单,以便将其作为文件上传很容易:

var dataURL = canvas.toDataURL('image/jpeg', 0.5);

var blob = dataURItoBlob(dataURL);

var fd = new FormData(document.forms[0]);

fd.append("canvasImage", blob);

以上是 将数据URI转换为文件,然后追加到FormData 的全部内容, 来源链接: utcz.com/qa/425703.html

回到顶部