2

我想通过拖放将文件发送到带有 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);
}

它可以工作并将数据发送到服务器,但是formidableparse 方法的日志如下:

fields: {foo: 'bar', upload=''}
files: {}
4

1 回答 1

0

千辛万苦,终于找到方法了!这是我的读者代码:

reader.readAsArrayBuffer(file);

我将文件类型从 更改bufferBlob,它可以工作:

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 File 标签使用 Blob for HTML Forms 发布...如果您有想法,请告诉这里!

于 2013-07-03T18:23:05.590 回答