使用socketio-file-upload上传多个文件

时间:2017-10-20 21:24:29

标签: node.js mongodb file-upload npm socket.io

我使用NodeJS和socket.io以及socketio-file-upload上传多个文件,效果很好!但是我遇到了一个问题,即我试图保存输入的名称属性,这些文件会将它们保存到我的数据库中。

当我上传一个或多个文件时,我似乎无法访问输入字段名称或显示哪个文件来自哪个输入字段的内容。

这是我的前线:

var uploader = new SocketIOFileUpload(socket);

var array_files_lvl_3 = [
    document.getElementById("l3_id_front"),
    document.getElementById("l3_id_back"),
    document.getElementById("l3_address_proof_1"),
    document.getElementById("l3_address_proof_2"),
    document.getElementById("l3_passport")
];

uploader.listenOnArraySubmit(document.getElementById("save_level_3"), array_files_lvl_3);

这是我的背:

var uploader = new siofu();
uploader.dir = "uploads/userL3";
uploader.listen(socket);

uploader.on('saved', function(evnt){
    console.log(evnt);
    //this "event" variable has a lot of information 
    //but none of it tells me the input name where it came from.
});

这就是" evnt"变量成立:

enter image description here

2 个答案:

答案 0 :(得分:1)

不幸的是,图书馆不会发送该信息。所以你可以做任何现有的配置。所以这需要修改代码。

<强> client.js:374

var _fileSelectCallback = function (event) {
    var files = event.target.files || event.dataTransfer.files;
    event.preventDefault();
    var source = event.target;
    _baseFileSelectCallback(files, source);

<强> client.js:343

var _baseFileSelectCallback = function (files, source) {
    if (files.length === 0) return;

    // Ensure existence of meta property on each file
    for (var i = 0; i < files.length; i++) {
        if (source) {
            if (!files[i].meta) files[i].meta = {
                sourceElementId: source.id || "",
                sourceElementName: source.name || ""
            };
        } else {
            if (!files[i].meta) files[i].meta = {};
        }
    }

完成这些更改后,我可以在event.file.meta

中获取详细信息

element

答案 1 :(得分:0)

我是socketio-file-upload的作者。

看起来当前未在记录特定的输入字段,但这并不是很难添加的功能。有人打开a new issue并留下了指向该SO问题的指针。

一种解决方法是直接使用submitFiles而不是listenOnArraySubmit。这样的事情可能会起作用(未经测试):

// add a manual listener on your submit button
document.getElementById("save_level_3").addEventListener("click", () => {
  let index = 0;
  for (let element of array_files_lvl_3) {
    let files = element.files;
    for (let file of files) {
      file.meta = { index };
    }
    uploader.submitFiles(files);
    index++;
  }
});