使用JAVA实现读取文件流并设置浏览器下载或直接预览?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
成都地区优秀IDC服务器托管提供商(创新互联).为客户提供专业的达州电信机房,四川各地服务器托管,达州电信机房、多线服务器托管.托管咨询专线:13518219792response.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(); } }