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