加入两个jar包
commons-fileupload-1.2.1.jar
commons-io-2.0.jar
package com.greatest.flie.servlet;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
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.FileCleanerCleanup;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileCleaningTracker;
/**
* Servlet implementation class FileServlet
*/
@WebServlet("/uploadServlet")
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 创建基于磁盘的文件项的工厂
//FileItemFactory factory = new DiskFileItemFactory();
// 新建一个文件上传处理程序
//ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
//> 复杂的方式: 可以为文件的上传加入一些限制条件和其他的属性
// 创建基于磁盘的文件项的工厂
DiskFileItemFactory factory1 = new DiskFileItemFactory();
FileCleaningTracker fileCleaningTracker =
FileCleanerCleanup.getFileCleaningTracker(getServletContext());
factory1.setFileCleaningTracker(fileCleaningTracker);
//设置内存中最多可以存放的上传文件的大小, 若超出则把文件写到一个临时文件夹中. 以 byte 为单位
factory1.setSizeThreshold(1024 * 500);
//设置那个临时文件夹
File tempDirectory = new File("d:\\tempDirectory");
factory1.setRepository(tempDirectory);
// 新建一个文件上传处理程序
ServletFileUpload upload1 = new ServletFileUpload(factory1);
//设置上传文件的总的大小. 也可以设置单个文件的大小.
upload1.setSizeMax(1024 * 1024 * 50);
// 解析请求
// 1. 得到 FileItem 的集合 items
// Parse the request
try {
List <FileItem>/* FileItem */ items1= upload1.parseRequest(request);
// 2. 遍历 items:
for (FileItem item : items1) {
// 若是一个一般的表单域, 打印信息
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
System.out.println(name + ": " + value);
}
/* flie
commons-beanutils-1.8.0(1).jar
application/octet-stream
231320
d:\files\commons-beanutils-1.8.0(1).jar
desc: Zxc
getName方法用于获得文件上传字段中的文件名。
注意IE或FireFox中获取的文件名是不一样的,IE中是绝对路径,FireFox中只是文件名。
* */
// 若是文件域则把文件保存到 d:\\files 目录下.
else {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
long sizeInBytes = item.getSize();
System.out.println(fieldName);
System.out.println(fileName);
System.out.println(contentType);
System.out.println(sizeInBytes);
InputStream in = item.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
fileName = "d:\\files\\" + fileName;
System.out.println(fileName);
OutputStream out = new FileOutputStream(fileName);
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.close();
in.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
// InputStream f=request.getInputStream();
// Reader in=new InputStreamReader(f);
// BufferedReader b=new BufferedReader(in);
// String str=null;
// while((str=b.readLine())!=null){
// System.out.println(str);
// }
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="uploadServlet" method="post" enctype="multipart/form-data">
File:<input type="file" name="flie"/>
<br><br>
desc: <input type="text" name="desc"/>
<br><br>
<input type="submit" value="Submit"/>
</form>
</body>
</html>