У меня есть приложение в Котлине, архитектура Spring Boot Microservices. Я использую метод для принятия Bytearray в API, который принимает Zip в качестве байтона, а внутри Zip будут доступны документы. Я извлекаю этот Zip, чтобы получить от него документы (также с вложенной структурой каталогов). Мы используем следующую библиотеку для выполнения Zip Extraction < /p>
net.lingala.zip4j:zip4j:2.1.2образное.java.util.zip.ZipException: only DEFLATED entries can have EXT descriptor
< /code>
Примечание. Поддерживается метод сжатия. < /p>
Вот фрагмент кода для справки < /p>
fun extractZipFromBase64(zip: ByteArray, ndId: String) {
val requestData = repository.findOneById(ndId) ?: throw Exception("no records found.")
requestData?.let { nummer ->
val detailsData = processRequestClient.getDetails(nummer)
val zis = ZipInputStream(zip.inputStream())
try {
var zipEntry: ZipEntry?
while ((zis.nextEntry.also { zipEntry = it }) != null) {
if (zipEntry?.isDirectory == true) {
logger.info { "Processing file: ${zipEntry?.name} for $ndId" }
} else {
extracteFileFromZip(zipEntry, zis, nummer, detailsData)
}
}
} catch (e: Exception) {
logger.error(e) { "Error occurred while performing upload from zip to data for ndId: $ndId" }
throw Exception("Error occurred while performing upload from zip to data for ndId: $ndId")
} finally {
zis.close()
}
} ?: throw Exception("no records found: $ndId")
}
private fun extracteFileFromZip(
zipEntry: ZipEntry?,
zis: ZipInputStream,
akteZip: Boolean,
nummer: String,
dataRest: DataRest
) {
logger.info { "File Name: ${zipEntry?.name}" }
val bos = ByteArrayOutputStream()
try {
val buffer = ByteArray(1024)
var bytesRead: Int
while ((zis.read(buffer).also { bytesRead = it }) != -1) {
bos.write(buffer, 0, bytesRead)
}
val blob = bos.toByteArray()
val contentType = getMimeTypeFromExtension(zipEntry?.name!!)
saveDocument(nummer, zipEntry, contentType, blob, dataRest)
} catch (e: Exception) {
logger.error(e) { "Error occurred extracteFileFromZip file: ${zipEntry?.name}" }
throw Exception("Error occurred while fetching file: ${zipEntry?.name}")
} finally {
bos.close()
}
}
private fun saveDocument(
nummer: String,
zipEntry: ZipEntry?,
contentType: String,
blob: ByteArray,
dataRest: DataRest) {
//internal logic to save blob - byteArray data
}
private fun getMimeTypeFromExtension(relativePath: String): String {
val extension = FilenameUtils.getExtension(relativePath).lowercase(Locale.getDefault())
return when (extension) {
"pdf" -> MediaType.APPLICATION_PDF_VALUE
"png" -> MediaType.IMAGE_PNG_VALUE
"jpg" -> MediaType.IMAGE_JPEG_VALUE
"jpeg" -> MediaType.IMAGE_JPEG_VALUE
"doc" -> "application/msword"
"docx" -> "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
"xml" -> MediaType.APPLICATION_XML_VALUE
"eml" -> "message/rfc822"
"xlsx" -> "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
"txt" -> MediaType.TEXT_PLAIN_VALUE
else -> MediaType.APPLICATION_OCTET_STREAM_VALUE
}
}
< /code>
Как исправить проблему сжатия и как дать поддержку множественным методам сжатия с помощью этой библиотеки? Или можно извлечь файлы без таких ошибок < /p>
Примечание. Мы использовали < /p>
commons-io-2.14.0образное. lingala.zip4j к последней версии, если поддерживается этот метод сжатия. Или можно извлечь файлы без таких ошибок
Подробнее здесь: https://stackoverflow.com/questions/794 ... descriptor
Лицом к Java.util.zip.zipexception: только дефтируемые записи могут иметь дескриптор EXT с извлечением Zip с помощью net ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Android ZipInputStream: только записи DEFLATED могут иметь дескриптор EXT
Гость » » в форуме Android - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Гость
-