gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:01 24 4
gpt4 key购买 nike

我想通过拖放的方式使用 FormData 将文件发送到服务器,然后使用 Formidable 将其保存到磁盘。在 Node 中。

我使用此代码发送文件: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: {}

最佳答案

经过一番修改,终于找到办法了!这是我的读者代码:

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 表单来发布...如果您有想法,请在这里告诉!

关于javascript - npm 强大的上传,与客户端上的 JS FormData 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17427102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com