我想通过拖放将文件发送到带有FormData的服务器,并将其保存到节点中Formidable的磁盘上。
我使用此代码发送文件:https://github.com/felixge/node-formidable#example
并且它可以工作,我的服务器保存数据,但我不能通过js FormData
发送它。我编写了这段代码,但它没有将收到的数据解析为文件,并将它们显示为字段。代码描述得更好:
// Client code
//inside drop event so i have files:
files = event.dataTransfer.files;
file = files[0];
reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function(evt) {
var data, fd;
data = evt.target.result; // it's real binary data on log
fd = new FormData;
fd.append("foo", "bar");
fd.append("upload", data);
uploadImage(fd);
}
uploadImage = function(data) {
xmlHttp.overrideMimeType("multipart/form-data");
xmlHttp.open('post', '/upload');
xmlHttp.send(data);
}
它工作并将数据发送到服务器,但formidable
的解析方法记录如下:
fields: {foo: 'bar', upload=''}
files: {}
答案 0 :(得分:0)
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 for HTML Forms发布...如果你有想法,请告诉我们!