1. 程式人生 > >JAVA讀取檔案流,設定瀏覽器下載或直接預覽

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();
        }
    }