文件上传

来源:互联网 发布:信捷usb编程电缆和三菱 编辑:程序博客网 时间:2024/06/08 17:11

一、简介

使用form表单上传文件,使用post传参方式,利用抓包工具可以直接查看传递的内容,但若是图片等,那么会在请求包体中显示为乱码,此时,我们可以根据请求包的结构来解析,最终取得上传的文件。更为简洁的方法就是,使用已经包装较为完善的工具包。

二、环境

所需jar包commons-fileupload-1.3.2.jarcommons-io-2.5.jar下载地址http://commons.apache.org/proper/commons-fileupload/http://commons.apache.org/proper/commons-io/

三、实例

jsp

<form action="../register.servlet" method="post" enctype="multipart/form-data">    userName:<input type="text" value="" name="username"></input><br/>    password:<input type="password" value="" name="password"></input><br/>    picture:<input type="file" name="picture"></input><br/>    file:<input type="file" name="picture"></input><br/>    <input type="submit" value="提交" /></form>

java

package com.upload.servlet;import java.io.File;import java.io.IOException;import java.util.List;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 org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;@WebServlet("/register.servlet")public class RegisterServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);        /*设置编码格式*/        servletFileUpload.setHeaderEncoding("utf-8");        try {            List<FileItem> list = servletFileUpload.parseRequest(request);            for (FileItem fileItem : list) {                if(fileItem.isFormField()){/*表单*/                    String name = fileItem.getFieldName();                    /**设置表单获取的值的编码格式/                    String value = fileItem.getString("utf-8");                    System.out.println(name+":"+value);                    }else{/*文件*/                    String name = fileItem.getName();                    String path = getServletContext().getRealPath("/")+"upload";                    System.out.println(path);                    File file = new File(path);                    /*若是文件不存在,则创建*/                    if(!file.exists()){                        file.mkdirs();                    }                    File saveFile = new File(file, name);                    fileItem.write(saveFile);                }            }        } catch (FileUploadException e) {            e.printStackTrace();        } catch (Exception e) {            e.printStackTrace();        }    }}
0 0