博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java文件上传与下载
阅读量:5282 次
发布时间:2019-06-14

本文共 4170 字,大约阅读时间需要 13 分钟。

  文件上传与下载可谓上网中的常见现象。apache为我们准备了用于文件上传与下载的两个jar包(commons-fileupload-1.2.1.jar,commons-io-1.4.jar)。我们在web项目中,将这两个jar包添加依赖,就可以使用客户端上传文件、服务器端下载文件的功能。

  我们假设一个前端页面(如jsp页面)向服务器发起一个上传文件的请求,这时,表单必须必须用POST方式提交,设置表单提交格式为enctype="multipart/form-data",表示表单将能够提交字节数据,而不是键值对;服务器获取数据的时候,就不能request.getParameter了,必须用流获取;我们在服务器端用工具类库,对接收到的数据进行解析分析,及文件转储。

  前端页面的表单如下:  

<%--提交普通键值对数据--%>
<%--上传文件--%>

  接下来是处理文件上传与下载的核心工具类:

import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;/** * 处理文件上传与下载 */@WebServlet(name = "UploadServlet",urlPatterns = "/UploadServlet")public class UploadServlet extends HttpServlet {    private String dirPath=null;    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //处理中文文件名乱码        request.setCharacterEncoding("UTF-8");        genUploadDir(request);//创建文件上传的根目录        // 检查前端发来的请求是否文件上传请求        boolean isMultipart = ServletFileUpload.isMultipartContent(request);        if (isMultipart) {            //符合文件上传的要求,则进行文件的解析和转储            // Create a factory for disk-based file items            FileItemFactory factory = new DiskFileItemFactory();            // Create a new file upload handler            ServletFileUpload upload = new ServletFileUpload(factory);          // Parse the request            try {                List
items = upload.parseRequest(request); Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { //如果是一个普通表单域 processFormField(item); } else { //如果是文件域 processUploadedFile(item); } } response.getWriter().write("successful"); } catch (FileUploadException e) { e.printStackTrace(); } } } //创建我们文件上传的根目录 private void genUploadDir(HttpServletRequest request) { if (dirPath==null) { dirPath =request.getServletContext().getRealPath("/WEB-INF/upload/"); File dir=new File(dirPath); //如果根目录不存在 if (!dir.exists()) { //则新建该文件夹 dir.mkdirs(); } } } private void processUploadedFile(FileItem item) { String fieldName = item.getFieldName(); System.out.println("fieldName = " + fieldName); String fileName = item.getName(); System.out.println("fileName = " + fileName); long sizeInBytes = item.getSize(); System.out.println("sizeInBytes = " + sizeInBytes); File uploadedFile = new File(dirPath,fileName); try { item.write(uploadedFile); } catch (Exception e) { e.printStackTrace(); } } private void processFormField(FileItem item) { String name = item.getFieldName(); System.out.println("name = " + name); String value = item.getString(); System.out.println("value = " + value); System.out.println("======================================"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }}

  在idea中运行tomcat服务器后,在前端表单中填入数据与上传的文件,服务器控制台显示文件上传成功:

键值对数据name = in_data1value = helloworld======================================上传文件数据fieldName = uploadFilefileName = JVM指令.txtsizeInBytes = 28733

转载于:https://www.cnblogs.com/lizhangyong/p/8624378.html

你可能感兴趣的文章
八叉树
查看>>
Git 远程仓库
查看>>
关于静态文本框透明度的问题
查看>>
javascript的发展及个人笔记
查看>>
全选,反全选,反选,获取选中的值,根据子选择控制全选按钮
查看>>
[CF#250 Div.2 D]The Child and Zoo(并查集)
查看>>
博客园博客插入公式
查看>>
hdu 1028 Ignatius and the Princess III(母函数入门+模板)
查看>>
Ubuntu下配置安装telnet server
查看>>
Codeforces 235 E Number Challenge
查看>>
ubuntu 常见命令整理
查看>>
EJBCA安装教程+postgresql+wildfly10
查看>>
(五十四)涂鸦的实现和截图的保存
查看>>
配置EditPlus使其可以编译运行java程序
查看>>
java中的占位符\t\n\r\f
查看>>
MySQL通过frm 和 ibd 恢复数据过程
查看>>
SRS源码——Listener
查看>>
Java面向对象抽象类案例分析
查看>>
对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释
查看>>
Thymeleaf模板格式化LocalDatetime时间格式
查看>>