webkitRelativePath在expressjs fileupload中不可用

时间:2018-05-26 13:25:59

标签: node.js express file-upload

我正在尝试使用Expressjs文件上传模块获取'webkitRelativePath'但不可用。解决这个问题的任何解决方案?

文件对象如下所示: enter image description here

HTTP请求: enter image description here

快递(req.files) enter image description here

你怎么看,ExpressJS日志只包含没有绝对文件路径的文件名,我需要知道文件的位置,以便用Node文件系统创建所需的文件夹。

1 个答案:

答案 0 :(得分:0)

我弄清楚如何解决它。 ExpressJS Fileupload中间件使用path.basename从路径中提取文件名作为“名称”返回。

这里有效的解决方案是发送加密的文件名(我使用window.btoa)来加密文件名,以便Fileupload中间件不知道在哪里剪切提取名称的路径,它就离开了它喜欢它。

然后我只使用atob()来解密实际上是路径的文件名。

<强>前端

function handleFolderSelect(evt) {
    var files = evt.target.files;

    var fd = new FormData();
    _.each(files,(v,k)=>{
        fd.append('files', files[k], window.btoa(files[k].webkitRelativePath)); // Encrypt path
    });

    $http.post('/upload/directory', fd, {
        transformRequest: angular.identity,
        headers: {'Content-Type': undefined}
    }).then(function(resp){
        // Do something
    });
}

document.getElementById('browse-directory').addEventListener('change', handleFolderSelect, false);

返回端

app.post('/upload/directory', cors(corsOptions), (req,res)=>{

    _.each(req.files.files,(file,key)=>{
        file.name = atob(file.name); // Decrypt path
    });

    // Process data

});

FormData:https://developer.mozilla.org/en-US/docs/Web/API/FormData/append

atob / btoa:https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa