JavaWeb servlet如何实现下载与上传功能

  介绍

这篇文章主要讲解了JavaWeb servlet如何实现下载与上传功能,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

servlet实现下载功能

实现流程

1。首先制作一个jsp页面,主要是用来触发下载的。这里可以根据你的想法来做,当然servlet那边就要相应的更改了。我这里使用一个简单的一个标签来触发。

 JavaWeb servlet如何实现下载与上传功能

2。设置响应信息,告诉浏览器要将传过来的数据识别成下载,根据提交上来的数据找到对应文件,转成流,返回给浏览器;

 JavaWeb servlet如何实现下载与上传功能

中文文件名问题:

    <李>虽然真的不建议使用中文文件名。但还是给一下处理手段。

先给出触发的条件: JavaWeb servlet如何实现下载与上传功能

中文文件名需要解决两个问题:

1。浏览器提交上来的中文文件名要识别:这里是普通的get和post的中文数据问题

得到方式:<强>字符串文件名=新的字符串(filename.getBytes (“iso - 8859 - 1 -“),“utf-8");【tomcat8不需要】

发布方式:<强> request.setCharacterEncoding (“utf-8")

2。返回给浏览器时,浏览器能识别,即能正确显示回来的下载文件名(如果你下载东西遇到过文件名乱码,就是这个没处理好):

处理方法:

 JavaWeb servlet如何实现下载与上传功能

保护无效doGet (HttpServletRequest请求,HttpServletResponse响应)
  抛出ServletException IOException {//1 .获取下载目标
  字符串文件名=request.getParameter (“target");
  System.out.println(文件名);//2 .找到下载目标
  字符串路径=getServletContext () .getRealPath(“下载/?+文件名);
  文件文件=新文件(路径);
  如果(file.exists ()) {//3。如果文件存在,那么设置响应的内容为下载,告诉浏览器将信息识别成下载//判断一下浏览器
  字符串剂=request.getHeader (“User-Agent");
  如果(agent.contains (“Firefox")){//火狐
  BASE64Encoder BASE64Encoder=new BASE64Encoder ();
  文件名=,=,# 63;utf-8& # 63; B& # 63;“+ base64Encoder.encode (filename.getBytes (“utf-8")) +“, # 63;=?;
  其他}{//ie和谷歌
  文件名=URLEncoder。编码(文件名,“utf-8");
  }
  response.setHeader (“Content-Disposition"“依恋;文件名=?+文件名);//4 .获取文件流
  FileInputStream fis=new FileInputStream(文件);
  OutputStream os=response.getOutputStream ();//5 .返回给浏览器
  int len=0;
  byte[]新字节缓冲区=[1024];
  在((len=fis.read(缓冲)!=1){
  操作系统。写(缓冲区,0,len);
  }
  os.flush();//冲洗一下,确保一下
  os.close ();
  fis.close ();
  其他}{
  response.setContentType (“text/html; charset=UTF-8");
  response.getWriter () .write(“找不到文件“);
  }
  
  }
<人力资源/>

servlet实现上传功能

1。创建一个页面,用于上传:【这里只用了一个上传,但事实上下面的代码是支持多个上传的】

 JavaWeb servlet如何实现下载与上传功能

【当使用了<代码> enctype= <代码>“多部分/form-data"之后,普通输入框的内容,将无法使用getParameter获取

2。导入包,以便使用fileupload: commons-fileupload-1.2.1.jar和commons-io-1.4.jar【这里导入io包主要是用于io流对接,上传的文件流直接对接输出流,如果你不导入,那么需要手动处理流中的数据!】

3。创建DiskFileItemFactory工厂类,用来:DiskFileItemFactory工厂=new DiskFileItemFactory ();

4。创建解析类,用于解析resquest: ServletFileUpload上传=new ServletFileUpload(工厂);

5。解析内容,获取一个列表,数据都存储在列表中:List列表=upload.parseRequest(请求);

现在信息封装方法已经跟之前没有文件上传时不一样了,所以需要解析:

 JavaWeb servlet如何实现下载与上传功能

6。操作列表【列表中的每一个元素都是FileItem对象,可以用FileItem对象.isFormField()来判断是否是表单项(认为文件是上传项),如果是真的话,说明是普通的输入框内容,如果你想要存储输入框提交的内容,那么这里可以处理一下,不为真说明是上传项,这里可以针对流进行操作】

JavaWeb servlet如何实现下载与上传功能