文件上传的步骤
(因为需要解析请求以及使用io流所以首先需要引入commom-fileupload 和common-io两个jar包)
1、创建DiskFileItemFactory对象 并调用该类的setRepository方法在指定路径设置临时文件夹 这个类将请求消息实体中的每一个项目
封装成单独的DiskFileItem 当上传达文件时以临时文件保存在硬盘中
2、创建ServletFileUpload对象 ServletFileUpload用于处理表单数据,将数据封装到 FileItem 对象中
3、通过parseRequest方法解析请求 并将结果存入一个带有<FileItem>泛型的List集合中
4、遍历集合 isFormField 判断是否为isFormField表单域,如果不是表单域 则设置文件上传到的文件夹
5、用一个缓冲输入流bufferedinputstream接收list 用buferedoutputstream输出流的write()方法写入文件 flush()刷新
页面
1、设置form的属性enctype="multipart/form-data“,这个属性告诉服务器,我们是要提交文件了,而不是一个表单。
2:<input type=“file” />这是表单中用来选择上传文件用的,
package com.sx;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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.FileUploadException;
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 {
/* String userName = request.getParameter("userName");
System.out.println("userName===="+userName);
InputStream is = request.getInputStream();
byte[] buff = new byte[1024];
int len = 0;
while((len = is.read(buff))!=-1){
System.out.println(new String(buff, 0, len));
}*/
try {
// 1、创建DiskFileItemFactory对象
DiskFileItemFactory df = new DiskFileItemFactory();
df.setRepository(new File("d:\\temp"));
// 2、创建ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(df);//ServletFileUpload 处理表单数据,将数据封装
到 FileItem 对象中
// 3、通过parseRequest方法解析请求
List<FileItem> itemList = upload.parseRequest(request);
for(FileItem list : itemList ){
if(list.isFormField()){ //判断是否普通元素
String fileName = list.getFieldName();
String value = list.getString();
System.out.println("fileName ="+fileName+"; vlaue="+value);
}else{
String fileName = list.getFieldName();
String value = list.getString();
String name = list.getName();
// System.out.println("上传文件 ------fileName ="+fileName+"; vlaue="+value);
System.out.println("上传文件名="+name);
String path = "D:\\upload\\"+name.substring(name.lastIndexOf("\\",name.length()));
System.out.println("path="+path);
File file = new File(path);
BufferedInputStream bif = new BufferedInputStream(list.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
byte[] buff = new byte[1024];
int len = 0;
while((len = bif.read(buff))!=-1){
bos.write(buff, 0, len);
bos.flush();
}
bif.close();
bos.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}