Javascript npm强大的上传,与客户端上的JS FormData一起使用
我想通过拖放的方式将FormData文件发送到服务器,并将其保存到节点中的磁盘 我使用此代码发送文件: 它工作正常,我的服务器保存了数据,但我无法通过jsJavascript 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
发送数据。我写了这段代码,但它没有将接收到的数据解析为文件,而是像字段一样显示它们。该代码更好地描述了这一点:
//客户端代码
//在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再次询问信息!:)