Я выяснил, как это исправить.Промежуточное программное обеспечение 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
атоб / бтоа: https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa