使用 Commens-FileUpload 组件实现文件上传

1,首先我们在  jsp 页面文件上写入简单的  form 表单元素

    

 <form action="servlet/Upload" method="post" enctype="multipart/form-data">
    	用户名:<input name="uname" type="text"/>
    	图片:<input name="file" type="file"/>
    		 <input type="submit" value="提交"/>
    </form>

  form表单中 method 属性的 值  不可以  设置成 get  因为get上传的文件的内存太小。

  还有 enctype属性的值设置成  multipart/form-data  大体意思是上传的类型是最大值

  还有一个是 提交表单不用设置name 属性  。设置 name 属性 没有 意义,会大大的减缓 浏览器运行速度

2,配置 jar 包

  commons-fileupload-1.3.2.jar

  commons-io-2.5.jar

3,写 servle  t语句

  

package cn.happy.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class Upload 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 {
		 //解决中文乱码问题 因为提交方式是 post  所以使用   request.setCharacterEncoding()方法

          request.setCharacterEncoding("utf-8");
          //借助第三方apache 组织的jar包
		 //上传
		 //创建接收文件的工厂类
		
		FileItemFactory factory=new DiskFileItemFactory();
		//创建解析对象
		ServletFileUpload upload=new ServletFileUpload(factory);
		try {
			//根据请求解析出 FileItem  类型的 集合   每一个 item 就是一个表单对象
			List<FileItem> list = upload.parseRequest(request);
			for (FileItem item : list) {
				//判定 是否是普通的表单 如果是 返回 true    如果不是则 false
				if(item.isFormField()){ //这里表示普通的表单
					//找到表单名字   判定是否于源文件名相同
					if(item.getFieldName().equals("uname")){
						String uname = item.getString("utf-8");
						request.setAttribute("uname", uname);
					}
				}else{//是文本表单
					
					//文件域字段 获取想要上传文件的名字
					String filename = item.getName();
					//servlet里面能获取application
					//获取你要上传的最终路径的绝对路径
					/*因为java里头没有application 所以我们使用
					 * getServletContext()方法点出getRealPath("里头写的是上传文件到哪儿的路径")写入绝对路径
					 */
					String path = getServletContext().getRealPath("/WEB-INF/upload");
					//使用文件接收最终的文件路径写入我们的内容
					File file=new File(path,filename);
					item.write(file);
				}
			}			
										
		} catch (FileUploadException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  

原文地址:https://www.cnblogs.com/bb1008/p/7308558.html