在文件上传到我的php / Codeigniter API之前,我正在使用react-cropper提供裁剪功能。该裁剪器以数据URL的形式提供新绘制的图像。
由于我的API已经可以处理“常规”文件上传,因此我不得不将数据url转换为JS文件对象。我在Stackoverflow上找到了这段代码:
dataURLtoFile = (dataurl, filename)=> {
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 File([u8arr], filename, {type:mime});
}
这确实创建了一个文件对象,但是使用了不同的“格式”(很抱歉,我没有使用正确的术语,我对这些标准了解不多)。在request(post)有效负载中,我得到了:
------ WebKitFormBoundaryv2GMBVWB5JuqZ4Kb
Content-Disposition:表单数据;名称=“文件”
然后,我只看到整个数据URL字符串:
data:image / png; base64,iVBORw0KGgoAAAANSUhEUgAAAnoAAAFkCAYAAAC3npZ6AAAgAElEQVR4Xu2d ....
Codeigniter告诉我“文件类型无效” ...
当我以“正常方式”发送文件时,有效负载看起来有所不同:
------ WebKitFormBoundaryfwxkF3RhkIh31zhT内容处置:form-data; name =“ file”;
filename =“ 88179f049c0d1d26c823d2954ecb54a7_w_e1854-64.png” 内容类型:image / png
-WebKitFormBoundaryfwxkF3RhkIh31zhT-
我可以将此处粘贴的此dataUrltoFile函数进行调整以产生与常规文件相同的结果吗?在诉诸于调整我的API(也许我不愿意这样做)之前,也许还有另一种方法来解决这个问题?