bookmanager文件上传相关
Q7nl1s admin

image-20230308171509329

1
2
3
4
5
@Controller
@RequestMapping("/update")
public class UpdateController {
...
}

这个类有两个方法,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* 我的上传方法
* @param req
* @param dirName
* @return
*/
private String myUpdate(HttpServletRequest req, String dirName) {
String res = null; // 返回网络路径
try {
String staticDir = ResourceUtils.getURL("classpath:").getPath() + "static"; // 得到classes/static目录
String localDir = staticDir + "/" + dirName; //本地目录
// 如果结果目录不存在,则创建目录
File resDirFile = new File(localDir);
if(!resDirFile.exists()) {
boolean flag = resDirFile.mkdirs();
if(!flag) throw new RuntimeException("创建结果目录失败");
}
//先判断上传的数据是否多段数据(只有是多段的数据,才是文件上传的)
if (ServletFileUpload.isMultipartContent(req)) {
// 创建 FileItemFactory 工厂实现类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
// 创建用于解析上传数据的工具类 ServletFileUpload 类
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
// 解析上传的数据,得到每一个表单项 FileItem
List<FileItem> list = servletFileUpload.parseRequest(new ServletRequestContext(req));
// 循环判断,每一个表单项,是普通类型,还是上传的文件
for (FileItem fileItem : list) {
if ( !fileItem.isFormField()) { // 是上传的文件
// 上传的文件
System.out.println("表单项的 name 属性值:" + fileItem.getFieldName());
System.out.println("上传的文件名:" + fileItem.getName());
// 加个时间戳防止重名
String newFileName = System.currentTimeMillis() + fileItem.getName();
// 写文件
File file = new File(localDir + "/" + newFileName);
fileItem.write(file);
// 返回值
res = "http://localhost:8092/BookManager/" + dirName + "/" + newFileName;
}
}
}
}
catch (Exception e) {
e.printStackTrace();
}
return res;
}

第一个方法是 myUpdate,它是由第二个方法 updateImg 使用的私有方法。myUpdate 的目的是将上传的文件保存到本地目录并返回文件的 URL。该方法接受两个参数:HttpServletRequestdirName。第一个参数是包含要上传的文件的HTTP请求。第二个参数是文件应该保存在的目录的名称。该方法返回一个字符串,表示上传文件的 URL(网络路径)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 上传图片
* @param req
* @return
*/
@RequestMapping("/updateImg")
@ResponseBody
public Map<String,Object> updateImg(HttpServletRequest req){
String resPath = myUpdate(req, "pictures");

Map<String,Object> res = new HashMap<>();
res.put("code",0);
res.put("data", resPath);

return res;
}

第二个方法 updateImg 是一个公共方法,用于处理上传图片的 HTTP 请求。该方法使用 @RequestMapping 注解将方法映射到URL /update/updateImg。该方法接受一个参数 HttpServletRequest,它是包含要上传的图像的 HTTP 请求。该方法使用 HttpServletRequest 和目录名”pictures”调用 myUpdate ,将图像保存到名为”pictures”的本地目录中。然后,该方法创建一个 HashMap 对象来存储结果,并使用 @ResponseBody 注解将其作为JSON对象返回。结果是一个包含两个键值对的映射:键”code”的值为 0,键”data”表示上传图片的 URL。

image-20230308200610313

可以看到我们新上传的图片的网络地址为:http://localhost:8092/BookManager/pictures/1678013435695Camel_Xiangzi.jpg

image-20230308200935330

可以看到在外面本地,相关目录已经创建且图片也已经上传到我们的本地目录中。

上传图片成功会打印相关信息

image-20230308201406315

会有看到浏览器返回的响应信息

image-20230308201814763

 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View