JAVA读取文件流,设置浏览器下载或直接预览

最近项目需要在浏览器中通过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();
        }
    }


猜你喜欢

转载自blog.csdn.net/kokjuis/article/details/79576472