upload.jsp:
<form action="uploadServlet" method="post" enctype="multipart/form-data">
待上传路径:<input type="file" name="file"></input>
<br>
<input type="submit" value="上传"></input>
</form>
enctype="multipart/form-data"
表示表单以二进制传输据
引入两个包
步骤:
l 得到fileItem的集合
l 处理每一个fileItem对象
l 如果是表单域:获取文件名称、大小、输入流等
l 如果是文本域:直接获取名字和值
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置文件大小,超过这个大小就将其放到下面的临时目录中
factory.setSizeThreshold(1024*500);
File tempDirectory = new File("d:\\javaweb-workspace\\tempDirectory");
factory.setRepository(tempDirectory);
// 得到fileItem的集合
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1024 * 1024 * 5);// 总大小最大只能有5M
upload.setFileSizeMax(1024 * 1024 * 3);// 单个文件最大只能3M
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items){
// 表单域
if (item.isFormField()){
String name = item.getName();// 返回原因文件名
String fieldName = item.getFieldName();
String value = item.getString();
System.out.println("Name : " + name);
System.out.println("fieldName : " + fieldName);
System.out.println("getString : " + value);
}
else{// 文件域
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();// 是否在内存中
long sizeInBytes = item.getSize();// 大小
System.out.println("fieldName : " + fieldName);
System.out.println("fileName : " + fileName);
System.out.println("contentType : " + contentType);
System.out.println("isInMemory : " + isInMemory);
System.out.println("sizeInBytes : " + sizeInBytes);
InputStream in = item.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
fileName = "d:\\javaweb-workspace\\uploadFile\\" + fileName;
FileOutputStream out = new FileOutputStream(fileName);
while ((len = in.read(buffer)) != -1){
out.write(buffer, 0, len);
}
out.close();
in.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
在页面中选择一个2M多的文件上传,后台输出如下:
