是否可以从zip文件夹中解压缩单个文件并返回解压缩的文件而不将数据存储在服务器上?
我有一个结构未知的zip文件,我想开发一种服务,该服务将按需提供给定文件的内容,而无需解压缩整个zip文件,也无需在磁盘上进行写操作。所以,如果我有这样的压缩文件
zip_folder.zip
| folder1
| file1.txt
| file2.png
| folder 2
| file3.jpg
| file4.pdf
| ...
因此,我希望我的服务接收文件的名称和路径,以便可以发送文件。
例如,fileName
可能是folder1/file1.txt
def getFileContent(fileName: String): IBinaryContent = {
val content: IBinaryContent = getBinaryContent(...)
val zipInputStream: ZipInputStream = new ZipInputStream(content.getInputStream)
val outputStream: FileOutputStream = new FileOutputStream(fileName)
var zipEntry: ZipEntry = null
var founded: Boolean = false
while ({
zipEntry = zipInputStream.getNextEntry
Option(zipEntry).isDefined && !founded
}) {
if (zipEntry.getName.equals(fileName)) {
val buffer: Array[Byte] = Array.ofDim(9000) // FIXME how to get the dimension of the array
var length = 0
while ({
length = zipInputStream.read(buffer)
length != -1
}) {
outputStream.write(buffer, 0, length)
}
outputStream.close()
founded = true
}
}
zipInputStream.close()
outputStream /* how can I return the value? */
}
不写磁盘内容怎么办?
您可以使用ByteArrayOutputStream
而不是FileOutputStream
将zip条目解压缩到内存中。然后调用toByteArray()
它。
还要注意,从技术上讲,如果您可以通过支持deflate编码的协议(通常是Zip中使用的标准压缩)的协议(例如HTTP(S))传输zip,则无需解压缩zip部分。文件)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句