我需要将dataURL转换为Javascript中的文件对象,以便使用AJAX发送它。可能吗?如果是,请告诉我怎么做
如果需要通过ajax发送,则无需使用文件对象,只需要Blob和FormData对象
正如我在侧边提到的,为什么不通过ajax将base64字符串发送到服务器并将其转换为二进制服务器端,例如使用PHP的base64\u decode?无论如何,这个答案中的标准兼容代码适用于Chrome 13和WebKit nightlies:
函数dataURItoBlob(dataURI){
//将base64转换为字符串中的原始二进制数据
//不处理URLEncoded数据URI-请参阅SO答案#6850276以了解执行此操作的代码
var byteString=atob(dataURI.split(’,’)[1]);
//分离出mime组件
var mimeString=dataURI.split(’,’)[0]。split(’:’)[1]。split(’;’)[0];
//将字符串的字节写入ArrayBuffer
var ab=新阵列缓冲区(byteString.length);
var ia=新的UINT8阵列(ab);
对于(var i=0;i<;byteString.length;i++){
ia[i]=byteString.charCodeAt(i);
}
//旧代码
//将ArrayBuffer写入一个blob,就完成了
//var bb=新的BlobBuilder();
//bb.追加(ab);
//返回bb.getBlob(模拟字符串);
//新代码
返回新Blob([ab],{type:mimeString});
}
然后,只需将blob附加到新的FormData对象,并使用ajax将其发布到服务器:
var blob=dataURItoBlob(someDataUrl);
var fd=新表单数据(document.forms[0]);
var xhr=new XMLHttpRequest();
追加(“myFile”,blob);
xhr.open('POST','/',true);
xhr.send(fd);