java web 文件上传

来源:互联网 发布:中科院软件所 出国 编辑:程序博客网 时间:2024/05/22 03:56
1、设置form表单请求的mime编码:
    enctype的默认值是application/x-www-form-urlencoded,不能用于文件上传,只有使用multipart/form-data,才能上传二进制文件,
2、设置form表单的请求方式为post,默认为get,get不支持二进制传输,而且get请求传递参数的长度受浏览器地址栏的限制
jsp页面文件上传Demo:
    <form action="FileServlet" method="post" enctype="multipart/form-data">
        书名:<input type="text" name="bookname"/>
        文件:<input type="file" name="uploadFile" />
        <input type="submit" value="提交"/>
    </form>
4、导入apache提供的两个jar包,commons-fileupload和conmons-id,
3、将Form提交到servlet处理
   

编写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;

//导入的包围apache。commons中的
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class FileServlet
 */
@WebServlet("/FileServlet")
public class FileServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
      
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        
        //判断提交过来的form表单mime编码是否为multipart/form-data格式
        boolean isMultiPart = ServletFileUpload.isMultipartContent(request);
        if(isMultiPart){//mime编码为multipart/form-data
            try {
                //实例化一个ServletFileUpload对象(通过工厂创建)
                FileItemFactory fileItemFactory = new DiskFileItemFactory();
                ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
                //解析form表单中的所有文件,返回一个List(存放FileItem元素)
                List<FileItem> ItemList = fileUpload.parseRequest(request);
                for (FileItem fileItem : ItemList) {//遍历
                    //判断表单类型
                    if(fileItem.isFormField()){//普通表单字段
                        //接受普通表单
                        //取出表单中name为bookname的字段
                        if("bookname".equals(fileItem.getName())){
                            String bookName = fileItem.getString("utf-8");
                            System.out.println(bookName);
                        }
                        //……
                        
                    }else{//文件表单字段
                        String parentPath = getServletContext().getRealPath("images/");//文件存储根目录
                        String fileName = fileItem.getName();//文件名,一般使用时间戳
                        File file = new File(parentPath, fileName);
                        fileItem.write(file);//文件写入硬盘
                    }
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }

}

实现图片上传只需增加判断文件结尾代码控制

              String fileName = fileItem.getName();//文件名,一般使用时间戳
                        if(fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".png")){
                            
                            String parentPath = getServletContext().getRealPath("images/");//文件存储根目录
                            File file = new File(parentPath, fileName);
                            fileItem.write(file);//文件写入硬盘
                        } else {
                            response.getWriter().print("<script>alert('图片格式错误,请选择.jpg .jpeg .png格式的图片');window.history.back(1);</script>");
                        }

1 0