java-web之图片上传(文件上传)FileItemFactory使用

1.FileUpload的初识

   fileUpload是apache的commons组件提供的上传组件,它最主要的工作就是帮我们解析request.getInpustream()。可以参考在线API文档:http://tool.oschina.net/apidocs/apidoc?api=commons-fileupload

使用fileUpload组件首先需要引入两个jar包:

commons-fileUpload.jar
commons-io.jar

使用fileUpload固定步骤:

创建工厂类:DiskFileItemFactory factory=new DiskFileItemFactory();
创建解析器:ServletFileUpload upload=new ServletFileUpload(factory);
使用解析器解析request对象:List list=upload.parseRequest(request);


一个FileItem对象对应一个表单项。FileItem类有如下方法:

  String getFieldName():获取表单项的name的属性值。
  String getName():获取文件字段的文件名。如果是普通字段,则返回null
  String getString():获取字段的内容。如果是普通字段,则是它的value值;如果是文件字段,则是文件内容。
  String getContentType():获取上传的文件类型,例如text/plain、image。如果是普通字段,则返回null。
  long getSize():获取字段内容的大小,单位是字节。
  boolean isFormField():判断是否是普通表单字段,若是,返回true,否则返回false。
  InputStream getInputStream():获得文件内容的输入流。如果是普通字段,则返回value值的输入流。

 

例子:

jsp页面:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



    <%--表单后面写入enctype 是说明表单不仅有文字还有二进制文件--%>
    
用户名:
年龄:
分数:
照片
${error}

servlet代码:

package com.bjsxt.servlet;

import com.bjsxt.entity.Student;
import com.bjsxt.service.StudentService;
import com.bjsxt.service.impl.StudentServiceImpl;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUpload;
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.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

public class AddServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.创建文件工厂
        FileItemFactory factory=new DiskFileItemFactory();
        //2.创建解析器
        ServletFileUpload upload=new ServletFileUpload(factory);
        //限制文件上传的大小
        //限制所有的文件上传的大小
        upload.setFileSizeMax(1024*5*16);
        //限制单个文件上传的大小
        upload.setSizeMax(1024*16);
        //设置上传的中文格式
        upload.setHeaderEncoding("utf-8");
        //使用解析器
        ListfileItems=null;
        try {
            fileItems=upload.parseRequest(request);
        } catch (FileUploadException e) {
            e.printStackTrace();
            //刚才设置的大小在这里运行的时候,如果超过就会抛出异常
            request.setAttribute("error","文件大小不能超过16kb");
            request.getRequestDispatcher("/add.jsp").forward(request,response);
            return ;
        }
        //开始接受表单的所有数据(包括 文字和文件)
        String name=null;
        int age=0;
        double score=0;
        String fileName=null;
        String uuidName=null;
        String contentType=null;
        for(int i=0;i

 

你可能感兴趣的:(工具包的简单使用,java进阶(javaEE),文件上传,javaweb文件上传,FileItemFactory)