使java.util.zip.ZipoutStream无效
我试图使流式传输到浏览器的Zip文件无效,以使用户无法打开它使java.util.zip.ZipoutStream无效,java,kotlin,download,zip,inputstream,Java,Kotlin,Download,Zip,Inputstream,我试图使流式传输到浏览器的Zip文件无效,以使用户无法打开它 @GetMapping("/downloads/${downloadId}") fun downloadZip(@PathVariable("downloadId") downloadId: String, response: HttpServletResponse): StreamingResponseBody { response.addHeader(HttpHeaders.CONT
@GetMapping("/downloads/${downloadId}")
fun downloadZip(@PathVariable("downloadId") downloadId: String, response: HttpServletResponse): StreamingResponseBody {
response.addHeader(HttpHeaders.CONTENT_DISPOSITION, "attachement;filename=\"${download.filename}\"")
response.status = HttpServletResponse.SC_OK
response.contentType = MediaType.APPLICATION_OCTET_STREAM_VALUE
return StreamingResponseBody { out ->
ZipOutputStream(out).use { zos ->
URL(fileUrl).openStream().use { stream ->
zos.putNextEntry(ZipEntry("target.file"))
val bytes: ByteArray
do {
bytes = stream.readNBytes(100000000)
val hash = md5(bytes)
if (hash != expectedHash) {
// What i am looking for
zos.invalidate()
}
bytes.inputStream().transferTo(zos)
} while(bytes.size > 0)
zos.closeEntry()
}
}
}
}
在服务器中,我正在检查块的md5校验和,如果它们不相等,用户就不能使用zip中的数据
您知道如何实现这一点吗?只需抛出一个异常?或者返回409冲突我尝试了这个,zip仍然有效并且可以打开当你关闭
zos
时会发生什么?同样,它仍然可以有效打开。可以处理两次流,但这将使下载时间延长2倍。对于高达10GB的文件,这不是一个好主意:/只是抛出一个异常?或者返回409冲突我尝试了这个,zip仍然有效并且可以打开当你关闭zos
时会发生什么?同样,它仍然可以有效打开。可以处理两次流,但这将使下载时间延长2倍。对于高达10GB的文件,这不是一个好主意:/