javaWeb实战教程5-fileupload文件上传

来源:互联网 发布:软考网络规划师论文 编辑:程序博客网 时间:2024/06/14 07:14

javaWeb实战教程


2.8 commons-fileupload文件上传

Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。需要引入的 jar 文件:commons-fileupload-1.3.2commons-io-2.4.jar

在网站根目录WebContent下新建html:lesson8_fileupload.html,写入一个文件上传的表单:

<form action="Lesson8FileUpload" method="post" enctype="multipart/form-data">    文件1:<input type="file" name="uploadFile1" /><br/>    文件2:<input type="file" name="uploadFile2" /><br/>    姓名:<input type="text" name="username" /><br/>    年龄:<input type="text" name="age" /><br/>    <input type="submit" value="上传" /><br/></form>

在cn.funsoftware.Lesson.servlet新建一个类Lesson8FileUpload.java:

@WebServlet("/Lesson8FileUpload")public class Lesson8FileUpload extends HttpServlet {    @Override    protected void doPost    (HttpServletRequest request, HttpServletResponse response) throws ServletException,            IOException {    }}

先判断提交的表单是不是文件上传类型:

ServletFileUpload.isMultipartContent(request)//判断表单是否是文件上传

配置上传参数:

DiskFileItemFactory factory = new DiskFileItemFactory();// 配置上传参数

新建ServletFileUpload

ServletFileUpload fileUpload = new ServletFileUpload(factory);fileUpload.setHeaderEncoding("utf-8");// 设置编码

request交给ServletFileUpload处理,获得表单数据:

List<FileItem> fileItems = fileUpload.parseRequest(request);

循环遍历fileItems里的元素,通过fileItem.isFormField()方法判断参数是文本还是文件,文本的话可以通过getFieldName()来获得文本名称,getString()获得文本内容;如果是文件的话,可以使用write()方法写入文件中。

完整的文件上传代码写在doPost方法内:

if (!ServletFileUpload.isMultipartContent(request)) {    response.getOutputStream().write("不是文件上传表单".getBytes());    return;}// 配置上传参数DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload fileUpload = new ServletFileUpload(factory);fileUpload.setHeaderEncoding("utf-8");// 设置编码try {    List<FileItem> fileItems = fileUpload.parseRequest(request);    if (fileItems == null) {        response.getOutputStream().write("表单里没有上传任何文件".getBytes());        return;    }    for (FileItem fileItem : fileItems) {        if (fileItem.isFormField()) {// 是文本            System.out.println(fileItem.getFieldName() + ":" + fileItem.getString());        } else {// 是文件            String uploadPath = request.getServletContext().getRealPath("./") + File.separator                + "upload";             // 如果目录不存在则创建               File uploadDir = new File(uploadPath);               if (!uploadDir.exists()) {                   uploadDir.mkdir();               }            String fileName = new File(fileItem.getName()).getName();            String filePath = uploadPath + File.separator + fileName;            File storeFile = new File(filePath);            // 在控制台输出文件的上传路径            System.out.println(filePath);            // 保存文件到硬盘            fileItem.write(storeFile);            System.out.println("文件"+fileItem.getFieldName()+"上传成功");        }    }} catch (Exception e) {    e.printStackTrace();}

原创粉丝点击