|Summary:||Support POIFSFileSystem that uses a temp file for backing - to support encryption of large files|
|Product:||POI||Reporter:||PJ Fanning <fanningpj>|
|Component:||POIFS||Assignee:||POI Developers List <dev>|
|OS:||Mac OS X 10.1|
Description PJ Fanning 2019-04-13 09:55:34 UTC
https://stackoverflow.com/questions/55658495/apache-poi-encrypting-xlsx-file-greater-than-2gb-fails POIFSFileSystem is needed for agile encryption. By default, POIFSFileSystem uses in-memory data source. The support for file-backed data source assumes the file is OLE encoded. This is a problem if you want to take an OOXML file and encrypt it. My suggestion is that we create a TempFilePOIFSFileSystem that uses an initially empty temp file as the data source backing.
Comment 1 PJ Fanning 2019-04-13 10:04:26 UTC
https://github.com/apache/poi/commit/e8b5f8b3af7532e09e60c258afbb706d0df4b793 I'm happy to remove this if anyone thinks there is a better way to do this.
Comment 2 Andreas Beeker 2019-04-13 13:09:08 UTC
But to resolve the problem mentioned in the stack overflow issue, we also need to make sure to use a blocksize of 4096 bytes and check other issues, e.g. to handle large byte arrays differently. I'm currently on the road but afaik there was already some temporary file used in encrypting agile, because the written amount of bytes has to be prefixed.