如何详细解析JavaWeb中servlet实现文件下载与上传的技术要点?

2026-05-26 07:341阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1264个文字,预计阅读时间需要6分钟。

如何详细解析JavaWeb中servlet实现文件下载与上传的技术要点?

本文实例讲解了JavaWeb+servlet实现下载与上传功能的方法。分享给广大读者参考,具体如下:

内容:

1.servlet实现下载功能

2.servlet实现上传功能

3.首发日期:2018-07-21

servlet实现下载功能:

servlet实现下载功能主要涉及到以下几个步骤:

1.获取客户端请求的下载文件名;

2.设置响应头信息,指定下载的文件类型和文件名;

3.读取文件内容,并写入到响应对象中。

servlet实现上传功能:

servlet实现上传功能主要涉及到以下几个步骤:

1.获取上传文件的请求对象;

2.读取上传文件信息,包括文件名、文件类型、文件大小等;

如何详细解析JavaWeb中servlet实现文件下载与上传的技术要点?

3.将上传的文件保存到指定目录。

以上为JavaWeb+servlet实现下载与上传功能的基本方法,供大家参考。

本文实例讲述了JavaWeb servlet实现下载与上传功能的方法。分享给大家供大家参考,具体如下:

本文内容:

  • servlet实现下载功能
  • servlet实现上传功能

首发日期:2018-07-21


servlet实现下载功能

实现流程

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

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

中文文件名问题:

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

先给出触发的条件:

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

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

get方式:String filename = new String(filename.getBytes("iso-8859-1"),"utf-8");

post方式:request.setCharacterEncoding("utf-8")

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

处理方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.获取下载目标 String filename = request.getParameter("target"); System.out.println(filename); // 2.找到下载目标 String path = getServletContext().getRealPath("download/" + filename); File file = new File(path); if (file.exists()) { // 3.如果文件存在,那么设置响应的内容为下载,告诉浏览器将信息识别成下载 // 判断一下浏览器 String agent = request.getHeader("User-Agent"); if (agent.contains("Firefox")) {// 火狐 BASE64Encoder base64Encoder = new BASE64Encoder(); filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else {// ie和谷歌 filename = URLEncoder.encode(filename, "utf-8"); } response.setHeader("Content-Disposition", "attachment; filename=" + filename); // 4.获取文件流 FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream(); // 5.返回给浏览器 int len = 0; byte[] buffer = new byte[1024]; while ((len = fis.read(buffer)) != -1) { os.write(buffer, 0, len); } os.flush();// flush一下,确保一下 os.close(); fis.close(); } else { response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("找不到文件"); } }


servlet实现上传功能

1.创建一个页面,用于上传:

2.导入包,以便使用fileupload:commons-fileupload-1.2.1.jar和commons-io-1.4.jar

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

4.创建解析类,用于解析resquest:ServletFileUpload upload=new ServletFileUpload(factory);

5.解析内容,获取一个list,数据都存储在list中:List<FileItem> list = upload.parseRequest(request);

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

6.操作list

如何操作?

对于普通表单项:item.getFieldName()可以获取对应的name;item.getString()可以获取对应的值

对于上传项,需要操作它的流:item.getInputStream()可以获取对应的数据流。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); DiskFileItemFactory factory=new DiskFileItemFactory();//1.创建DiskFileItemFactory工厂类 ServletFileUpload upload=new ServletFileUpload(factory);//2.创建解析类,用于解析resquest try { List<FileItem> list = upload.parseRequest(request);//3.解析内容,获取一个list,数据都存储在list中 for(FileItem item:list) { if(item.isFormField()) {//判断是否是普通的表单内容 System.out.println(item.getFieldName());//获取的是表单中name属性的值 System.out.println(item.getString());//获取的是对应的表单的值 }else {//为假,说明是上传项 //获取流,进行处理 InputStream ism = item.getInputStream(); String path=getServletContext().getRealPath("/upload/"); System.out.println(path); String filename = item.getName();//这里getName可以获取文件名 System.out.println(filename); File file=new File(path+filename); file.createNewFile();//这里不做文件存在性和名字重复判断 OutputStream fos = new FileOutputStream(file); //这里直接借助commons.io来做io对接,不然需要做流的读取和写入 IOUtils.copy(ism,fos);//把输入流的数据拷贝到输出流 IOUtils.closeQuietly(ism); IOUtils.closeQuietly(fos); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

本文共计1264个文字,预计阅读时间需要6分钟。

如何详细解析JavaWeb中servlet实现文件下载与上传的技术要点?

本文实例讲解了JavaWeb+servlet实现下载与上传功能的方法。分享给广大读者参考,具体如下:

内容:

1.servlet实现下载功能

2.servlet实现上传功能

3.首发日期:2018-07-21

servlet实现下载功能:

servlet实现下载功能主要涉及到以下几个步骤:

1.获取客户端请求的下载文件名;

2.设置响应头信息,指定下载的文件类型和文件名;

3.读取文件内容,并写入到响应对象中。

servlet实现上传功能:

servlet实现上传功能主要涉及到以下几个步骤:

1.获取上传文件的请求对象;

2.读取上传文件信息,包括文件名、文件类型、文件大小等;

如何详细解析JavaWeb中servlet实现文件下载与上传的技术要点?

3.将上传的文件保存到指定目录。

以上为JavaWeb+servlet实现下载与上传功能的基本方法,供大家参考。

本文实例讲述了JavaWeb servlet实现下载与上传功能的方法。分享给大家供大家参考,具体如下:

本文内容:

  • servlet实现下载功能
  • servlet实现上传功能

首发日期:2018-07-21


servlet实现下载功能

实现流程

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

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

中文文件名问题:

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

先给出触发的条件:

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

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

get方式:String filename = new String(filename.getBytes("iso-8859-1"),"utf-8");

post方式:request.setCharacterEncoding("utf-8")

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

处理方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.获取下载目标 String filename = request.getParameter("target"); System.out.println(filename); // 2.找到下载目标 String path = getServletContext().getRealPath("download/" + filename); File file = new File(path); if (file.exists()) { // 3.如果文件存在,那么设置响应的内容为下载,告诉浏览器将信息识别成下载 // 判断一下浏览器 String agent = request.getHeader("User-Agent"); if (agent.contains("Firefox")) {// 火狐 BASE64Encoder base64Encoder = new BASE64Encoder(); filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else {// ie和谷歌 filename = URLEncoder.encode(filename, "utf-8"); } response.setHeader("Content-Disposition", "attachment; filename=" + filename); // 4.获取文件流 FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream(); // 5.返回给浏览器 int len = 0; byte[] buffer = new byte[1024]; while ((len = fis.read(buffer)) != -1) { os.write(buffer, 0, len); } os.flush();// flush一下,确保一下 os.close(); fis.close(); } else { response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("找不到文件"); } }


servlet实现上传功能

1.创建一个页面,用于上传:

2.导入包,以便使用fileupload:commons-fileupload-1.2.1.jar和commons-io-1.4.jar

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

4.创建解析类,用于解析resquest:ServletFileUpload upload=new ServletFileUpload(factory);

5.解析内容,获取一个list,数据都存储在list中:List<FileItem> list = upload.parseRequest(request);

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

6.操作list

如何操作?

对于普通表单项:item.getFieldName()可以获取对应的name;item.getString()可以获取对应的值

对于上传项,需要操作它的流:item.getInputStream()可以获取对应的数据流。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); DiskFileItemFactory factory=new DiskFileItemFactory();//1.创建DiskFileItemFactory工厂类 ServletFileUpload upload=new ServletFileUpload(factory);//2.创建解析类,用于解析resquest try { List<FileItem> list = upload.parseRequest(request);//3.解析内容,获取一个list,数据都存储在list中 for(FileItem item:list) { if(item.isFormField()) {//判断是否是普通的表单内容 System.out.println(item.getFieldName());//获取的是表单中name属性的值 System.out.println(item.getString());//获取的是对应的表单的值 }else {//为假,说明是上传项 //获取流,进行处理 InputStream ism = item.getInputStream(); String path=getServletContext().getRealPath("/upload/"); System.out.println(path); String filename = item.getName();//这里getName可以获取文件名 System.out.println(filename); File file=new File(path+filename); file.createNewFile();//这里不做文件存在性和名字重复判断 OutputStream fos = new FileOutputStream(file); //这里直接借助commons.io来做io对接,不然需要做流的读取和写入 IOUtils.copy(ism,fos);//把输入流的数据拷贝到输出流 IOUtils.closeQuietly(ism); IOUtils.closeQuietly(fos); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。