servlet利用fileupload实现文件上传

来源:互联网 发布:车牌识别软件破解版 编辑:程序博客网 时间:2024/06/05 06:48

            为了实现文件上传,实现我们表单必须设置一个属性:

             enctype="multipart/form-data"。

      先看上传的jsp页面:

      

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>  </head>    <body>      <form enctype="multipart/form-data" method="post" action="Fileupload">                                上传文件1<input type="file" name="file1"/><br/>                                上传文件2<input type="file" name="file2"/><br/>                               普通文本域1<input type="text" name="text1"/><br/>                                普通文本域2<input type="text" name="text2"/><br/>             <input type="submit"  value="上传"><br/>      </form>  </body></html>

   实现上传功能的servlet

   

package com.servlet;import java.io.File;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;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.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class Fileupload extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {        doPost(request,response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {        DiskFileItemFactory factory = new DiskFileItemFactory();//设定目录String path = request.getRealPath("/upload");//当文件大于某个尺寸时,不能直接写到内存中了,必须写到磁盘中,这个函数用来设定存储到磁盘//中的路径factory.setRepository(new File(path));//用来设定当大于多少时,才必须直接写入硬盘factory.setSizeThreshold(1024 * 1024);ServletFileUpload sf = new ServletFileUpload(factory);try {List<FileItem> items = sf.parseRequest(request);for(FileItem item : items){//isFormField()判断是不是只是简单的文本域,如果是简单的文本域就不存储if(item.isFormField()){System.out.println("普通的文本域");}//否则就是文件else{//获取文件名String value = item.getName();//因为fileload针对 苹果浏览器 获得 的并不是 简单的 文件名 而已, 所以//我们需要手动 把 前面的路径信息给去掉,当没有\的时候,start=-1int start = value.lastIndexOf("\\");//截取出我们需要的文件名String fileName = value.substring(start +1 );//把文件写到磁盘上item.write(new File(path,fileName));System.out.println("文件");}}} catch (Exception e) {e.printStackTrace();}}}