JAVA全系列 教程
3762个小节阅读:7088.9k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
上传是Web工程中很常见的功能,SpringMVC框架简化了文件上传的代码,我们首先使用JAVAEE原生方式上传文件:
编写上传表单
xxxxxxxxxx
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>上传</title>
</head>
<body>
<h3>文件上传</h3>
<%-- 上传表单的提交方式必须是post --%>
<%-- enctype属性为multipart/form-data,意思是不对表单数据进行编码 --%>
<form action="/fileUpload" method="post" enctype="multipart/form-data">
<%-- 文件上传控件,类型是file,必须要有name属性--%>
选择文件:<input type="file" name="upload"/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
接收请求体数据:
xxxxxxxxxx
@RequestMapping("/fileUpload")
public String upload(HttpServletRequest request) throws Exception {
// 获取输入流
ServletInputStream is = request.getInputStream();
// 从输入流获取请求体数据
int i = 0;
while ((i=is.read())!=-1){
System.out.print((char)i);
}
return "baizhan";
}
接下来需要分析请求体中的文件项,并将数据写入磁盘,此时需要借助文件上传工具
引入文件上传依赖:
xxxxxxxxxx
<!--文件上传-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-fileupload2-jakarta</artifactId>
<version>2.0.0-M1</version>
</dependency>
编写控制器接收上传请求,控制器进行三步操作:
创建文件夹,存放上传文件。
分析请求体,找到上传文件数据。
将文件数据写入文件夹。
xxxxxxxxxx
@RequestMapping("/fileUpload")
public String upload(HttpServletRequest request) throws Exception {
// 创建文件夹,存放上传文件
// 1.设置上传文件夹路径
String realPath = "E:\\springmvc\\mvc_demo1\\upload";
// 2.判断该目录是否存在,如果不存在,创建该目录
File file = new File(realPath);
if (!file.exists()){
file.mkdirs();
}
// 分析请求体,找到上传文件数据
// 1.创建磁盘文件工厂
DiskFileItemFactory factory = DiskFileItemFactory.builder().get();
// 2.创建上传数据分析器对象
JakartaServletDiskFileUpload upload = new JakartaServletDiskFileUpload(factory);
// 3.利用分析器对象解析请求体,返回所有数据项
List<DiskFileItem> fileItems = upload.parseRequest(request);
// 4.遍历所有数据,找到文件项(非表单项)
for (FileItem fileItem : fileItems) {
if (!fileItem.isFormField()){
// 将文件数据写入文件夹
// 1.获取文件名
String name = fileItem.getName();
// 2.将文件写入磁盘
fileItem.write(Paths.get(realPath,name));
// 3.删除内存中的临时文件
fileItem.delete();
}
}
return "baizhan";
}
实时效果反馈
1. 上传文件表单的提交方式必须为
A GET
B POST
C DELETE
D PUT
2. 上传文件表单的enctype
属性为
A multipart/form-data
B text/plain
C application/x-www-form-urlencoded
D 以上都可以
答案
1=>B 2=>A