Javascript npm强大的上传,与客户端上的JS FormData一起使用

Javascript npm强大的上传,与客户端上的JS FormData一起使用,javascript,node.js,multipartform-data,formidable,Javascript,Node.js,Multipartform Data,Formidable,我想通过拖放的方式将FormData文件发送到服务器,并将其保存到节点中的磁盘 我使用此代码发送文件: 它工作正常,我的服务器保存了数据,但我无法通过jsFormData发送数据。我写了这段代码,但它没有将接收到的数据解析为文件,而是像字段一样显示它们。该代码更好地描述了这一点: //客户端代码 //在drop事件内部,因此我有文件: files=event.dataTransfer.files; file=文件[0]; reader=newfilereader(); reader.readAs

我想通过拖放的方式将FormData文件发送到服务器,并将其保存到节点中的磁盘

我使用此代码发送文件:

它工作正常,我的服务器保存了数据,但我无法通过js
FormData
发送数据。我写了这段代码,但它没有将接收到的数据解析为文件,而是像字段一样显示它们。该代码更好地描述了这一点:

//客户端代码
//在drop事件内部,因此我有文件:
files=event.dataTransfer.files;
file=文件[0];
reader=newfilereader();
reader.readAsArrayBuffer(文件);
reader.onload=函数(evt){
var数据,fd;
data=evt.target.result;//它是日志上的真实二进制数据
fd=新的FormData;
fd.追加(“foo”、“bar”);
fd.追加(“上传”,数据);
上传图像(fd);
}
uploadImage=函数(数据){
重写emimetype(“多部分/表单数据”);
open('post','/upload');
发送(数据);
}
它工作并将数据发送到服务器,但是
的解析方法记录如下:

字段:{foo:'bar',upload=''''}
文件:{}

经过大量的改变,终于找到了一条路! 这是我的阅读器代码:

reader.readAsArrayBuffer(file);
我将文件类型从
buffer
更改为
Blob
,它可以工作:

arrayBufferToBlob: function(buffer, opt_contentType) {
    var uInt8Array;
    uInt8Array = new Uint8Array(buffer);
    return new Blob([uInt8Array], (opt_contentType ? {
        type: opt_contentType
    } : {}));
}
更改客户端代码:

//Changes of Client:
fd = new FormData;
data = arrayBufferToBlob(data);
fd.append("upload", data, "FileName");
nodeJS服务器的日志如下所示:

fields: {foo: 'bar'}
files: {'fileName'}

我认为Chrome(在其他浏览器上没有尝试过)HTML文件标签使用Blob来发布HTML表单。。。如果你有主意,告诉我

由于您正在上载
Blob
s,默认情况下,用户代理会将文件的多部分边界中的内容处置头的名称参数设置为“Blob”或类似的名称参数。理论上,您可以使用
FormData.append
中的第三个参数覆盖此值,但对它的支持不是很好。例如,早于22的Safari或Firefox版本不支持此功能。我怀疑手机浏览器可能也不支持这一点,但我还没有确认。tanX@RayNicholus,我并没有尝试创建一个响应性的web应用程序,只是为了演示,它是一个拖放式上传,所以不能在平板电脑或移动设备中工作!但tanX再次询问信息!:)