Я хочу, чтобы мои пользователи выбирали в браузере zip-файл, содержащий файлы изображений. Затем я просматриваю zip-файл и выбираю, какие файлы изображений отправлять на удаленный сервер (где они обрабатываются и т. д.). Это отлично работает для загрузки zip-файла и идентификации файлов в нем. Я выбираю файл с помощью
<input type="file">
элемент; Я прочитал его в виде zip-файла, используя отличную библиотеку JSZip:
var zip = new JSZip();
zip.loadAsync("file selected in browser")
Затем я идентифицирую zip-файлы в этом файле:
for (var key in zip.files) {
var myFile=zip.files[key]; }
Теперь с помощью JSZip я могу извлечь каждый сжатый файл:
zip.files["key for this file"].async("base64").then(function (myImage) {
//send this image to a remote server as if it were a file
});
Проблема с последним шагом. Я не могу подобрать правильную комбинацию вызовов, параметров и т. д., чтобы правильно загрузить это. Кажется очевидным, что нужно создать объект formData и отправить его оттуда, поэтому:
var fd = new FormData();
fd.append("file", myImage);
а затем опубликовать его ajax:
$.ajax({
type: 'POST',
url: url,
enctype: 'multipart/form-data',
contentType: false,
dataType: false,
processData: false,
data: fd,
}).done(function(data){
//do something with returned data
})
Однако это не работает на стороне сервера (хотя тот же файл, отправленный на тот же адрес из формы, работает нормально). Что мне не хватает? Или я не могу сделать это с помощью $.ajax (или http-модуля npm) и должен использовать что-то более низкоуровневое, например модуль запроса npm?
Помощь!