我正在尝试从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))
答案 0 :(得分:0)
这是因为您使用的InputStreamReader
用于文本内容而不是二进制内容,请尝试IOUtils.toByteArray(urlStream)
NB: 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);
}
}