我正在尝试使用Expressjs文件上传模块获取'webkitRelativePath'但不可用。解决这个问题的任何解决方案?
你怎么看,ExpressJS日志只包含没有绝对文件路径的文件名,我需要知道文件的位置,以便用Node文件系统创建所需的文件夹。
答案 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