文件上传
1)引入依赖
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
2)jsp代码
<form action="UploadServlet" enctype="multipart/form-data">
学号:<input type="text" name="id"><br>
姓名:<input type="text" name="name"><br>
上传照片:<input type="file" name="picture"><br>
<input type="submit" value="上传">
</form>
nctype="multipart/form-data"解析文件
表单提交方式必须是post,如果是get,地址栏可能放不下,最多只能放4K大小的内存
3)servlet代码
package student.servlet;
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;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
public class UploadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
//上传
//检查表单上传是否有字段(enctype="multipart/form-data")
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
//先解析数据,再将前台传过来的数据保存在item
List<FileItem> items = upload.parseRequest(req);
//遍历items中的值(三个)
Iterator<FileItem> iterator = items.iterator();
while (iterator.hasNext()) {
FileItem item = iterator.next();
//h获取普通表单的文件名
String itemName = item.getFieldName();
// int
//判断文件类型
//普通form表单字段
if (item.isFormField()) {
if (itemName.equals("id")) {
//req.getParameter()以前拿值
int id = Integer.parseInt(item.getString("UTF-8"));
} else if (itemName.equals("name")) {
String name = item.getString("UTF-8");
} else {
System.out.println("其他字段");
}
}
//文件字段(图片等)
else {
//文件名getName()
String fileName = item.getName();
//获取文件内容,并上传
//"."+File.separator当前路径
//动态获取tomcat路径
String path = req.getSession().getServletContext().getRealPath("upload");
//打印出来是这个:E:\IDEA\IdeaProjects\jsp34\target\jsp34\upload
System.out.println(path);
//指定文件上传 位置
File file = new File(path, fileName);
item.write(file);
System.out.println(fileName+"上传成功");
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
4)分析
System.out.println(itemName);
String name = fileItem.getString("UTF-8");
System.out.println(name);
name
ls
5)限制上传
类型:javascript
大小:
//设置上传文件时,用到临时文件大小
factory.setSizeThreshold(10240);//缓冲区文件大小10KB
factory.setRepository(new File("."+File.separator));//临时文件目录
//控制上传单个文件大小
//B-->KB 1024
upload.setSizeMax(20480);//bytes