webkitRelativePath недоступен в загрузке файла expressjs - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь получить 'webkitRelativePath' с модулем загрузки файлов Expressjs, но не доступен.Любое решение в решении этой проблемы?

Файловый объект выглядит следующим образом: enter image description here

HTTP-запрос: enter image description here

Express (req.files) enter image description here

Как видите, журнал ExpressJS содержит только имя файла без абсолютного пути к файлу, и мне нужно знать, где находится файл, расположенный всоздать необходимые папки с файловой системой Node.

1 Ответ

0 голосов
/ 26 мая 2018

Я выяснил, как это исправить.Промежуточное программное обеспечение 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

...