JAVAはファイルフローを読み、ブラウザを設置してダウンロードまたは直接プレビューを行う。
2690 ワード
最近のプロジェクトはブラウザでURLで画像をプレビューする必要があります。しかし、ブラウザは常にデフォルトでダウンロードされています。プレビューではありません。検討してみましたが、問題が見つかりました。
// response Header, , , , , 。
response.addHeader("Content-Disposition", "attachment;filename=" + FileUtil.getOriginalFilename(path));
そして注意が必要です。response.setContentType(contentType);// ,contentType , image/jpeg、image/png
@RequestMapping(value = "getFile/{folder}/{fileName:.+}*", method = RequestMethod.GET)
public void getFile(HttpServletResponse response, @PathVariable String folder,
@PathVariable String fileName)
{
//
response.setCharacterEncoding("UTF-8");
try
{
String path = folder + "/" + fileName;
boolean flag = ossClient.doesObjectExist(ossProperties.getBucket(), path);
//
if (flag)
{
// response
response.reset();
// response Header, , , , , 。
// response.addHeader("Content-Disposition",
// "attachment;filename=" + FileUtil.getOriginalFilename(path));
// response.addHeader("Content-Length", "" + buf.length);
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
// ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
OSSObject ossObject = ossClient.getObject(ossProperties.getBucket(), path);
String contentType = ossObject.getObjectMetadata().getContentType();
System.out.println(contentType);
// contentType
response.setContentType(contentType);
byte[] buf = new byte[1024];
InputStream in = ossObject.getObjectContent();
int L;
while ((L = in.read(buf)) != -1)
{
// if (buf.length != 0)
// {
toClient.write(buf, 0, L);
// }
}
in.close();
//
toClient.flush();
toClient.close();
// response.getOutputStream().write(bos.toByteArray());
}
else
{
response.sendError(HttpServletResponse.SC_NOT_FOUND, " ");
}
}
catch (IOException e)
{
e.printStackTrace();
}
}