我正在尝试从URL提取图像,并使其可从我的servlet下载。
我有以下代码,使用此代码,我可以下载图像。但是,当我尝试打开图像时,本地操作系统会说:“该图像可能已损坏或使用了预览无法识别的文件格式。”
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "attachment;filename=${FilenameUtils.getBaseName(s3Url)}.${FilenameUtils.getExtension(s3Url)}")
InputStream urlStream = new URL(s3Url).openStream()
response.outputStream << IOUtils.toByteArray(new InputStreamReader(urlStream))
请您参考如下方法:
这是因为您使用的InputStreamReader用于文本内容,而不是二进制内容,请尝试此IOUtils.toByteArray(urlStream)
注意: BTW尝试避免使用IOUtils.toByteArray,因为它将图像的内容加载到内存中,如果同时加载大图像或两张多个图像,可能会导致OOME。
为了避免加载到内存中,应将图像内容直接写入OutputStream中,如下所示:
try (InputStream urlStream = new URL(s3Url).openStream();
OutputStream outputStream = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int length;
while ((length = urlStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
}




