javaweb基础----文件下载
文件下载步骤:
1)浏览器发送请求给服务器(用户要下载的文件名)
2)服务器加载用户要下载的文件数据。
3)通知浏览器以下载的方式请求资源
4)使用IO技术,将数据发送(使用response对象发送数据)
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 // 处理中文乱码问题,并获取文件名 4 String parameter = request.getParameter("fileName"); 5 String fileName = new String(parameter.getBytes("iso-8859-1"), "utf-8"); 6 // 服务器加载用户要下载的文件数据 7 String realPath = this.getServletContext().getRealPath("/upload"); 8 File file = new File(realPath, fileName); 9 // 通知浏览器以下载的方式请求资源 10 // 设置文件媒体格式 11 response.setContentType(getServletContext().getMimeType(fileName)); 12 // 解决文件下载的中文乱码问题 13 // 判断浏览器的类型 14 String header = request.getHeader("User-Agent"); 15 if (header.contains("Firefox")) { 16 // 判断如果是火狐浏览器,使用base64编码 17 BASE64Encoder base64Encoder = new BASE64Encoder(); 18 fileName = "=?utf-8?B?" + base64Encoder.encode(fileName.getBytes("utf-8")) + "?="; 19 } else { 20 // 谷歌浏览器及其他浏览器处理 21 fileName = URLEncoder.encode(fileName, "utf-8"); 22 } 23 // 设置要被下载的文件的文件名 24 response.setHeader("Content-Disposition", "attachment;filename=" + fileName); 25 //使用IO技术,将数据发送(使用response对象发送数据) 26 //获取输入流,读取文件数据 27 FileInputStream fileInputStream = new FileInputStream(file); 28 //获取输出流,写出文件数据 29 ServletOutputStream outputStream = response.getOutputStream(); 30 //定义一个缓冲区 31 byte[] buff = new byte[1024]; 32 while(fileInputStream.read(buff)!=-1) { 33 outputStream.write(buff); 34 } 35 //关闭流 36 fileInputStream.close(); 37 }
先想再做,不想不做。
浙公网安备 33010602011771号