标签:body image http 其他 取名字 size file 指定 保存
1.文件上传页面显示
upload.jsp
<body>
<form action="uploadServlet" method="post" enctype="multipart/form-data">
File:<input type="file" name="file"/>
<input type="submit" value="Submit"/>
</form>
</body>
进行文件上传时,表单需要做的准备:
①请求方式为post:<form action="uploadServlet" method="post">
②使用file的表单域:<input type="file" name="file"/>
③使用multipart/form-data的请求编码方式:<form action="uploadServlet" method="post" enctype="multipart/form-data">
关于enctype属性取值:
服务端不能再使用request.getParameter()等方式获取请求信息,获取不到,因为请求的编码方式已经改为multipart/form-data,以二进制的方式提交请求信息。可以使用输入流的方式来获取,但是不建议这样做,操作起来太麻烦,具体使用commons-fileupload组件来完成文件的上传操作。
2.文件上传操作
2.1 环境搭建
加入commons-fileupload.jar包,commons-io.jar包

commons-io,jar包版本过高容易出现找不到有关类的错误。
2.2 基本思想
2.3 如何得到List<FileItem>对象
//create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); //create s new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); //parse the request List fileItems = upload.parseRequest(req);
也可以为文件的上传加入一些限制和其他的属性。
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存中最多可以存放的上传文件的大小,若超出则把文件写到一个临时的文件夹中,以byte为单位
factory.setSizeThreshold(4096);
// 设置临时文件夹的位置
factory.setRepository(new File("/tmp"));
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件的总的大小,也可以设置单个文件的大小
upload.setSizeMax(1000000);
List fileItems = upload.parseRequest(req);
2.4 实例代码
index.jsp
<body>
<a href="jspPage/upload.jsp">上传文件</a>
<br><br>
<a href="jspPage/download.jsp">下载文件</a>
</body>
upload.jsp
<body>
<form action="uploadServlet" method="post" enctype="multipart/form-data">
File:<input type="file" name="file"/>
<input type="submit" value="Submit"/>
</form>
</body>
uploadServlet.java
package com.javaweb.file;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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 uploadServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.得到FileItem的集合items
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存中最多可以存放的上传文件的大小,若超出则把文件写到一个临时的文件夹中,以byte为单位
factory.setSizeThreshold(1024*500);
// 设置临时文件夹的位置
File temDirectory=new File("e:\\");
factory.setRepository(temDirectory);
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件的总的大小,也可以设置单个文件的大小
upload.setSizeMax(1024*1024*5);
try {
//2.遍历items:若是一个一般的表单域,打印信息,若是文件域,则把文件保存到指定的磁盘位置
List<FileItem> fileItems = upload.parseRequest(request);
for(FileItem fileItem:fileItems){
if(fileItem.isFormField()){
String name=fileItem.getFieldName();
String value=fileItem.getString();
System.out.println(name+":"+value);
}else{
String fieldName=fileItem.getFieldName();
String fileName=fileItem.getName();
String contentType=fileItem.getContentType();
long sizeInBytes=fileItem.getSize();
System.out.println(fieldName);
System.out.println(fileName);
System.out.println(contentType);
System.out.println(sizeInBytes);
InputStream in=fileItem.getInputStream();
byte[] buffer=new byte[1024];
int len=0;
//fileName="e:\\"+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();
}
}
}
在web.xml中进行配置:
<servlet> <servlet-name>uploadServlet</servlet-name> <servlet-class>com.javaweb.file.uploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>uploadServlet</servlet-name> <url-pattern>/uploadServlet</url-pattern> </servlet-mapping>
运行后,

标签:body image http 其他 取名字 size file 指定 保存
原文地址:https://www.cnblogs.com/naihuangbao/p/9998231.html