MultipartHttpServletRequest_文件上传
标题与描述均提到了“MultipartHttpServletRequest_文件上传”,这主要涉及到在Web应用中通过HTTP请求上传文件的技术。在Spring框架中,`MultipartHttpServletRequest`是处理文件上传的关键类之一,它扩展了`HttpServletRequest`接口,提供了处理多部分请求的能力,特别是针对文件上传。 ### MultipartHttpServletRequest简介 在Spring MVC框架中,`MultipartHttpServletRequest`接口允许应用程序处理包含多个部分的HTTP请求,这些部分可以是普通表单字段或文件。当用户通过HTML表单上传文件时,浏览器会将文件数据与其他表单数据一起封装成一个Multipart/form-data类型的请求发送给服务器。Spring通过`MultipartResolver`解析这种类型的数据,并将其转换为`MultipartHttpServletRequest`对象,以便控制器方法可以访问上传的文件和其他表单字段。 ### 文件上传流程 文件上传的典型步骤包括: 1. **配置MultipartResolver**:在Spring配置中注册`MultipartResolver`,通常使用`StandardServletMultipartResolver`。 2. **创建文件上传的HTML表单**:确保表单使用`enctype="multipart/form-data"`属性。 3. **控制器方法处理上传**:在控制器方法中声明`MultipartFile`类型的参数来接收上传的文件,或者使用`MultipartHttpServletRequest`来获取文件和表单数据。 ### 示例代码分析 在给定的部分代码中,可以看到两个请求映射方法用于处理文件上传: 1. **单一文件上传**:`@RequestMapping(value="/uploadFile/{path}",method=RequestMethod.POST)` 方法接收一个路径参数和`HttpServletRequest`、`HttpServletResponse`对象。这里,`MultipartHttpServletRequest`被用来获取上传的文件,并将其保存到服务器上的指定目录。 2. **多文件上传**:虽然示例代码片段不完整,但可以看出`@RequestMapping(value="/uploadProFile",method=RequestMethod.POST)` 方法可能用于处理更复杂的文件上传场景,涉及多个文件以及额外的表单数据。该方法可能接收并处理多种类型的文件,如JavaScript、FreeMarker模板和图片文件,同时存储它们在不同的目录下,并记录版本号。 ### 实现细节 - **获取上传文件**:`MultipartFile`或`CommonsMultipartFile`(Apache Commons FileUpload库的实现)可用于获取上传文件的信息,如名称、大小等,并读取文件内容。 - **文件保存**:代码中使用`FileCopyUtils.copy()`方法将文件内容复制到服务器上的目标位置,处理异常并返回响应状态。 ### 总结 MultipartHttpServletRequest在Spring MVC中的使用,为文件上传提供了一个简洁且强大的解决方案。通过正确配置和理解其工作原理,开发人员能够轻松地在Web应用中集成文件上传功能,满足各种业务需求。无论是简单的单一文件上传还是复杂的多文件管理,Spring框架都提供了丰富的工具和API来支持这一过程。
@RequestMapping(value = "/uploadFile/{path}", method = RequestMethod.POST)
@ResponseBody
public ReturnObj upload(@PathVariable("path") String _path, HttpServletRequest request,
HttpServletResponse response) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest.getFile("file");
// String name = multipartRequest.getParameter("name");
String realFileName = file.getOriginalFilename();
System.out.println("文件名:" + realFileName);
String ctxPath = "";
if (StringUtils.isNotBlank(_path)) {
ctxPath = request.getSession().getServletContext().getRealPath("/") + _path + "/";
} else {
ctxPath = request.getSession().getServletContext().getRealPath("/") + "upload/";
}
System.out.println("上传路径:" + ctxPath);
File dirPath = new File(ctxPath);
if (!dirPath.exists()) {
dirPath.mkdir();
}
File uploadFile = new File(ctxPath + realFileName);
try {
FileCopyUtils.copy(file.getBytes(), uploadFile);
} catch (IOException e) {
e.printStackTrace();
return new ReturnObj(ReturnObj.ERROR);
}
}
// 项目文件上传,多文件
@RequestMapping(value = "/uploadProFile", method = RequestMethod.POST)
public String uploadMore(HttpServletRequest request, HttpServletResponse response, Model model) {
String msg = "";
int _status = 0;
boolean hasFail = false;
StringBuffer sb = new StringBuffer();
String uploadType = request.getParameter("uploadType");
String proPath = "";
if (StringUtils.isNotBlank(request.getParameter("proPath"))) {
proPath = request.getParameter("proPath") + "/";
String warPath = proPath;
String jsPath = proPath
+ (request.getParameter("jsPath") == null ? "" : request.getParameter("jsPath"));
String ftlPath = proPath
+ (request.getParameter("ftlPath") == null ? "" : request
.getParameter("ftlPath"));
String imgPath = proPath
+ (request.getParameter("imgPath") == null ? "" : request
.getParameter("imgPath"));
String version = request.getParameter("versionNum");
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
System.out.println("WAR上传路径:" + warPath);
System.out.println("JS上传路径:" + jsPath);
剩余5页未读,继续阅读
- mengkang19862015-07-26竟然是txt的,还以为是整个项目代码
- liliuliu12345612014-06-30这个百度文库上也有的。。我没用到。。
- guoqiang1395552016-09-28还行,但是需要自己修改下
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助