将数据URL转换为文件对象会产生奇怪的结果

时间:2018-06-21 12:03:05

标签: javascript reactjs multipartform-data

在文件上传到我的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(也许我不愿意这样做)之前,也许还有另一种方法来解决这个问题?

0 个答案:

没有答案