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
|
private String myUpdate(HttpServletRequest req, String dirName) { String res = null; try { String staticDir = ResourceUtils.getURL("classpath:").getPath() + "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 = new DiskFileItemFactory(); ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); 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。该方法接受两个参数:HttpServletRequest
和 dirName
。第一个参数是包含要上传的文件的HTTP请求。第二个参数是文件应该保存在的目录的名称。该方法返回一个字符串,表示上传文件的 URL(网络路径)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
@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。
可以看到我们新上传的图片的网络地址为:http://localhost:8092/BookManager/pictures/1678013435695Camel_Xiangzi.jpg
可以看到在外面本地,相关目录已经创建且图片也已经上传到我们的本地目录中。
上传图片成功会打印相关信息
会有看到浏览器返回的响应信息