Здесь
zip = new ZipFile(new File(fileName));
Вы предполагаете, что локальная дисковая файловая система на компьютере сервера уже содержит файл с точно таким же именем, как и на стороне клиента. Это неверное предположение. То, что он работал на localhost, очевидно, потому что и веб-браузер, и веб-сервер «по совпадению» работают на одной и той же машине с одинаковой файловой системой диска.
Кроме того, вы, похоже, используете Internet Explorer в качестве браузера, который неправильно включает полный путь в имя файла, например C:/full/path/to/file.ext
. Вы не должны полагаться на эту ошибку браузера. Другие браузеры, такие как Firefox, правильно отправляют только имя файла, например file.ext
, что, в свою очередь, привело бы к ошибке с new File(fileName)
(которая должна была помочь вам обнаружить вашу ошибку гораздо раньше).
Чтобы устранить эту «проблему», вам нужно получить файл содержимое как InputStream
от item.getInputStream()
:
ZipInputStream input = new ZipInputStream(item.getInputStream());
// ...
Или записать его на диск по item.write(file)
и сослаться на ZipFile
:
File file = File.createTempFile("temp", ".zip");
item.write(file);
ZipFile zipFile = new ZipFile(file);
// ...
Примечание: не забудьте заранее проверить расширение файла, иначе это может подавиться.