使用JAVA实现读取文件流并设置浏览器下载或直接预览-创新互联

使用JAVA实现读取文件流并设置浏览器下载或直接预览?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都地区优秀IDC服务器托管提供商(创新互联).为客户提供专业的达州电信机房,四川各地服务器托管,达州电信机房、多线服务器托管.托管咨询专线:13518219792

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

当前文章:使用JAVA实现读取文件流并设置浏览器下载或直接预览-创新互联
分享URL:http://ybzwz.com/article/dpiihc.html