use of net.lingala.zip4j.core.HeaderReader in project v7files by thiloplanz.
the class ZipFile method index.
/**
* index all individual files found in a zip archive already in storage
*
* @throws IOException
*/
public static final void index(ContentStorage storage, ContentPointer zipFile) throws IOException {
Content zip = storage.getContent(zipFile);
if (zip == null)
throw new IllegalArgumentException("invalid ContentPointer " + zipFile);
File tmp = File.createTempFile("v7files_zipfile_extractfile_", ".zip");
try {
OutputStream f = new FileOutputStream(tmp);
IOUtils.copy(zip.getInputStream(), f);
f.close();
// open up the zip file
HeaderReader r = new HeaderReader(new RandomAccessFile(tmp, "r"));
ZipModel model = r.readAllHeaders();
model.setZipFile(tmp.getAbsolutePath());
Map<String, Object> map = zipFile.serialize();
List<?> fhs = model.getCentralDirectory().getFileHeaders();
for (Object _fh : fhs) {
FileHeader fh = (FileHeader) _fh;
UnzipEngine en = new UnzipEngine(model, fh);
// this will read the local file header
en.getInputStream();
LocalFileHeader lh = en.getLocalFileHeader();
store(storage, map, fh, lh);
}
} catch (ZipException e) {
throw new IllegalArgumentException("ContentPointer does not refer to a zip file: " + zipFile, e);
} finally {
tmp.delete();
}
}
use of net.lingala.zip4j.core.HeaderReader in project v7files by thiloplanz.
the class ZipFile method extractFile.
/**
* find the data indicated by the ContentPointer, treats it as a zip
* archive, extracts the named file inside the archive, stores a reference
* to it in the ContentStorage and returns a ContentPointer to it.
*
* @throws FileNotFoundException
* if the archive exists, but does not contain the named file
* @throws IllegalArgumentException
* if the ContentPointer does not refer to a zip archive
*/
public static final ContentPointer extractFile(ContentStorage storage, ContentPointer zipFile, String fileName) throws IOException {
Content zip = storage.getContent(zipFile);
if (zip == null)
throw new IllegalArgumentException("invalid ContentPointer " + zipFile);
File tmp = File.createTempFile("v7files_zipfile_extractfile_", ".zip");
try {
OutputStream f = new FileOutputStream(tmp);
IOUtils.copy(zip.getInputStream(), f);
f.close();
// open up the zip file
HeaderReader r = new HeaderReader(new RandomAccessFile(tmp, "r"));
ZipModel model = r.readAllHeaders();
model.setZipFile(tmp.getAbsolutePath());
List<?> fhs = model.getCentralDirectory().getFileHeaders();
for (Object _fh : fhs) {
FileHeader fh = (FileHeader) _fh;
if (fileName.equals(fh.getFileName())) {
UnzipEngine en = new UnzipEngine(model, fh);
// this will read the local file header
en.getInputStream();
LocalFileHeader lh = en.getLocalFileHeader();
return store(storage, zipFile.serialize(), fh, lh);
}
}
} catch (ZipException e) {
throw new IllegalArgumentException("ContentPointer does not refer to a zip file: " + zipFile, e);
} finally {
tmp.delete();
}
throw new FileNotFoundException("ContentPointer does not contain " + fileName + ": " + zipFile);
}
Aggregations