Я использую калитки, чтобы иметь большие (~ 2Gb +) zip-файлы, отправленные в веб-приложение, для обработки zip-файла. Я использую классы java.util.zip. *, И мне нужно чтобы читать случайные записи из zip-файла. Так что мой код что-то вроде этого:Wicket FileUploadField и большие загрузки zip
class MyForm extends Form {
private FileUploadField fileField;
MyForm(String id) {
super(id);
fileField = new FileUploadField("upload");
add(fileField);
}
@Override
protected void onSubmit() {
FileUpload fileUpload = fileField.getFileUpload();
File file = fileUpload.writeToTempFile();
ZipFile zipFile = new ZipFile(file);
// Do more stuff
}
}
Как загрузки большая калитка помещает его в временный файл при обработке запроса, но затем writeToTempFile() копирует его в другой временный файл, так что теперь у меня есть две копии файла на диске. Это отнимает дисковое пространство, диск IO и увеличивает время обработки запроса.
Я не могу использовать ZipFileInputStream, поскольку мне нужно получить доступ к файлам в случайном порядке. Есть ли способ остановить калитку, дублирующую файл на диске?
Спасибо , Чтобы завершить это, FileItem по-прежнему не дает вам доступа к файлу, DiskFileItem, который реализует FileItem, имеет метод getStoreLocation(), который делает, поэтому тест и литье. –