Spring 对 Apache Commons FileUpload组件进行了“包装”,包装之后的API超赞!
1.配置MultipartResolver
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- set the max upload size100MB -->
<property name="maxUploadSize">
<value>104857600</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
</bean>
2.继承SimpleFormController,创建文件上传控制器。首先将传来的HttpServletRequest cast成Spring包装好的MultipartHttpServletRequest然后开始向往常一样去传来的参数,对于文件则直接用getFile("fileName")来获得MultipartFile类型,通过调用他的transferTo(File dest)方法存储到指定位置。
public class InfoFormController2 extends SimpleFormController {
private static Log log = LogFactory.getLog(InfoFormController.class);
private String uploadDir;
private InfoDao infoDao;
private TopicDao topicDao;
private ProfileService profileService;
public InfoFormController2(){
// setCommandClass(InfoDTO.class);
setCommandClass(Info.class);
}
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object cmd, BindException errors) {
// InfoDTO bean = (InfoDTO) cmd;
Info bean=(Info)cmd;
// byte[] bytes = bean.getFile();
// cast to multipart file so we can get additional information
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
String title = multipartRequest.getParameter("title");
String author= multipartRequest.getParameter("author");
String content = multipartRequest.getParameter("content");
String intro = multipartRequest.getParameter("imgIntro");
String tid = multipartRequest.getParameter("topicId");
String infoid=multipartRequest.getParameter("infoId");
String issue=multipartRequest.getParameter("issue");
MultipartFile file = multipartRequest.getFile("file");
MultipartFile video= multipartRequest.getFile("videoFile");
Info p = new Info();
if(infoid != null){
p.setInfoId(Integer.parseInt(infoid));
}
p.setContent(content);
p.setTitle(title);
p.setAuthor(author);
p.setImgIntro(intro);
p.setTopicId(Integer.parseInt(tid));
p.setPubDate(new java.util.Date());
if (! issue.isEmpty()){
p.setIssue(Integer.parseInt(issue));
}
if (!file.isEmpty()){
// String name=file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String name = sdf.format(new Date()) + ".jpg";
p.setImgName(name);
// String uploadDir = this.getUploadDir();
String uploadDir=getServletContext().getRealPath("/")+ "uploaded";
File dirPath = new File(uploadDir);
if (!dirPath.exists()) {
dirPath.mkdirs();
}
String sep = System.getProperty("file.separator");
File uploadedFile = new File(uploadDir + sep + name);
// try {
// FileCopyUtils.copy(bytes, uploadedFile);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
file.transferTo(uploadedFile);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
log.info("********************************");
log.info(uploadedFile.getAbsolutePath());
// log.info(bytes.length);
log.info("********************************");
}
if (!video.isEmpty()){
String videoName=video.getOriginalFilename();
p.setVideoName(videoName);
// String uploadDir = this.getUploadDir();
String videoDir=getServletContext().getRealPath("/")+ "video";
File dirPath = new File(videoDir);
if (!dirPath.exists()) {
dirPath.mkdirs();
}
String sep = System.getProperty("file.separator");
File videoFile = new File(videoDir + sep + videoName);
try {
video.transferTo(videoFile);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
infoDao.saveOrUpdate(p);
return new ModelAndView(new RedirectView("listInfo.htm?pid=1&topicId="+tid));
}
protected Map referenceData(HttpServletRequest request) {
// User u=(User)request.getSession().getAttribute("user");
// int rid=u.getRoleId();
// String hql="from Topic";
// List<Topic> topics = topicDao.findAllTopics();
// List<Topic> topics=topicDao.findTopicByCondition(hql);
// List topics=topicDao.getAll(org.zfzy.model.Topic.class);
Map map = new HashMap();
HttpSession sess=request.getSession();
User u=(User) sess.getAttribute("user");
List topics=profileService.getTopicsByUser(u.getUserId());
map.put("topics", topics);
return map;
}
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws ServletException {
// binder.registerCustomEditor(byte[].class,
// new ByteArrayMultipartFileEditor());
}
public void setInfoDao(InfoDao infoDao) {
this.infoDao = infoDao;
}
public void setTopicDao(TopicDao topicDao) {
this.topicDao = topicDao;
}
public String getUploadDir() {
return uploadDir;
}
public void setUploadDir(String uploadDir) {
this.uploadDir = uploadDir;
}
public void setProfileService(ProfileService profileService) {
this.profileService = profileService;
}
@Override
protected Object formBackingObject(HttpServletRequest request)
throws Exception {
// TODO Auto-generated method stub
// return super.formBackingObject(request);
if (request.getParameter("infoId") != null
&& request.getParameter("infoId").trim().length() > 0) {
Info i=(Info) infoDao.get(Info.class, Integer.parseInt(request.getParameter("infoId")));
// InfoDTO dto=new InfoDTO();
// dto.setInfoId(Integer.parseInt(request.getParameter("infoId")));
// dto.setContent(i.getContent());
// dto.setImgIntro(i.getImgIntro());
// dto.setTitle(i.getTitle());
// dto.setAuthor(i.getAuthor());
// dto.setIssue(i.getIssue());
// dto.setTopicId(new Integer(i.getTopicId()).toString());
// dto.setTopicId(i.getTopicId());
return i;
}
return new Info();
}
}
分享到:
相关推荐
-- 设定最大上传文件大小,单位为MB --> ``` 接下来,我们创建一个处理文件上传的Controller。在`@Controller`类中,我们可以定义一个`@RequestMapping`方法,该方法接收`MultipartFile`类型的参数,这表示上传...
本文将深入探讨Spring MVC中的文件上传方法,并基于提供的“spring学习:spring mvc上传文件方法分析”标题进行详细的解析。 首先,理解Spring MVC处理文件上传的基本流程至关重要。当用户在表单中选择文件并提交时...
考虑到安全性,应限制上传文件的大小和类型,防止DoS攻击。同时,对于大型文件,可以考虑分块上传,以减轻服务器压力。 通过以上步骤,我们可以在Spring MVC中实现文件上传并显示进度。这个功能可以显著提高用户...
在Spring MVC框架中,文件上传是一项常见的功能,而实现文件上传进度条则能提供更好的用户体验。这个场景通常涉及到前端的JavaScript或jQuery库(如jQuery File Upload)与后端的Spring MVC控制器之间的交互,以及...
本文是结合博客的源码,链接是:http://blog.csdn.net/u012660464/article/details/53434331 。名为:SpringMVC轻松实现文件上传功能。其是通过表单进行上传的。
在Spring MVC框架中,文件上传和下载是常见的功能需求,特别是在构建Web应用程序时。这个压缩包文件"Spring MVC 文件上传下载 后端 - Java.zip"包含的文档可能详细阐述了如何在Java后端实现这些功能。以下是关于...
在这个示例中,`@RequestParam("file") MultipartFile file`参数表示从请求中获取名为"file"的上传文件。如果文件不为空,代码会尝试读取文件内容并将其保存到服务器。如果在处理过程中出现异常,会返回错误信息。 ...
-- 设定最大上传文件大小,单位为MB --> <property name="maxUploadSize" value="10485760" /> <!-- 10MB --> <!-- 指定临时存储目录 --> <property name="defaultTempFileLocation" value="/tmp/spring/upload" ...
-- 指定最大上传文件大小,例如10MB --> ``` 在Controller中,创建一个处理文件上传的方法,如下所示: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile...
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
spring mvc上传 下载ftp文件
在Spring MVC中,`MultipartFile`类是用于处理上传文件的核心类,它封装了文件的原始名称、临时存储路径、文件大小等信息。你可以通过`MultipartFile`的API读取文件内容,或者将其保存到服务器的指定位置。为了防止...
这一功能对于构建Web应用程序,尤其是那些需要用户交互并处理上传文件的系统来说至关重要。本项目提供了一个完整的、经过测试的文件上传解决方案,支持多文件上传,并确保其能够正常运行。 在Spring MVC中实现文件...
1. **文件大小限制**:限制上传文件的大小,防止DoS攻击。 2. **文件类型检查**:验证上传文件的类型,防止恶意文件如`.jsp`、`.php`等被执行。 3. **文件名安全**:避免使用用户提供的文件名,防止路径遍历攻击。 4...
`定义了上传文件的保存路径。 - `protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd, BindException errors)`方法用于处理提交的数据。 - `(FileUploadBean...
-- 指定最大上传文件大小 --> ``` 3. **Controller层处理**: 创建一个Controller类,定义两个方法,分别处理文件上传和下载的请求。在上传方法中,通过`@RequestParam("file") MultipartFile file`接收上传...
Spring MVC 是一个强大的 web 应用开发框架,它提供了丰富的功能来处理用户请求,包括文件上传和下载。本文将深入探讨如何使用 Spring MVC 实现文件的上传与下载。 首先,要实现文件上传,我们需要引入一些必要的...
该方法通常接收一个`MultipartFile`类型的参数,这是Spring MVC为处理上传文件提供的特殊类型。示例代码如下: ```java @Controller public class UploadController { @RequestMapping(value = "/upload", ...