使java.util.zip.ZipoutStream无效

使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

我试图使流式传输到浏览器的Zip文件无效,以使用户无法打开它

@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的文件,这不是一个好主意:/