java 后台通过IO流把文件传到前端并下载

时间:2021-08-25 03:07:33

我的业务需求是两个不同的web程序放在不同的服务器上,web程序A要访问到web程序B上传上来的文件,所以用到了这一个IO读取文件的接口

JAVA代码(排版有点问题  已经尽力补救了(:3_ヽ)_)

  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import javax.servlet.ServletOutputStream;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. @Controller
  12. @RequestMapping(value = "/manage")
  13. public class ManageAction{
  14. /**
  15. * 通过流把文件传到前台下载
  16. * @param request
  17. * @param response
  18. * @param id 第几个文件 (因为有多个文件 用;号隔开的)
  19. * @param tzggid 对应的通知公告id
  20. */
  21. @RequestMapping(value = "/findfile")
  22. @ResponseBody
  23. public void findfile(HttpServletRequest request,HttpServletResponse response,@RequestParam("id") String id,@RequestParam("tzggid") String tzggid) throws IOException {
  24. ServletOutputStream out = null;
  25. FileInputStream ips = null;
  26. List<Map<String, Object>> list = null; //此处为业务需要
  27. list = jdbcTemplate.queryForList("select fjaddress,fjname from tb_tzgg where id = ?",tzggid); //此处为业务需要
  28. if(list.size() > 0){
  29. try {
  30. String url = String.valueOf(list.get(0).get("fjaddress")).split(";")[Integer.valueOf(id)]; //此处为业务需要 如果是测试可以指定路径
  31. //获取文件存放的路径
  32. File file = new File(url);
  33. String fileName=file.getName();
  34. //获取到文字 数据库里对应的附件名字加上老的文件名字:filename 截取到后面的文件类型 例:txt 组成一个新的文件名字:newFileName
  35. String newFileName = String.valueOf(list.get(0).get("fjname")).split(";")[Integer.parseInt(id)]+"."+fileName.substring(fileName.lastIndexOf(".")+1);
  36. if(!file.exists()) {
  37. //如果文件不存在就跳出
  38. return;
  39. }
  40. ips = new FileInputStream(file);
  41. response.setContentType("multipart/form-data");
  42. //为文件重新设置名字,采用数据库内存储的文件名称
  43. response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(newFileName.getBytes("UTF-8"),"ISO8859-1") + "\"");
  44. out = response.getOutputStream();
  45. //读取文件流
  46. int len = 0;
  47. byte[] buffer = new byte[1024 * 10];
  48. while ((len = ips.read(buffer)) != -1){
  49. out.write(buffer,0,len);
  50. }
  51. out.flush();
  52. }catch (Exception e){
  53. e.printStackTrace();
  54. }finally {
  55. try {
  56. out.close();
  57. ips.close();
  58. } catch (IOException e) {
  59. System.out.println("关闭流出现异常");
  60. e.printStackTrace();
  61. }
  62. }
  63. }
  64. return ;
  65. }
  66. }

前端访问:

java 后台通过IO流把文件传到前端并下载

贴上我自己的数据库让你们更清晰一点


java 后台通过IO流把文件传到前端并下载

以上就是所有的java通过io流访问文件的后台全部代码了。希望能帮到你们

https://blog.csdn.net/L1481333167/article/details/81705769