您的位置:首页 > 编程语言 > Java开发

springmvc 文件上传异步处理

2014-03-22 11:22 253 查看
springmvc3提供了文件上传异步处理功能,当文件上传时,controller不需要一直等到文件上传成功后再返回视图,而是先返回到servlet容器,待异步处理的线程完成后转向指定视图!

首先要在web.xml中配置:

<servlet>

<servlet-name>mvc</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:mvc.xml</param-value>

</init-param>

<async-supported>true</async-supported>//必须

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>mvc</servlet-name>

<url-pattern>*.mvc</url-pattern>

</servlet-mapping>

在mvc中需要配置multipartResolver:

<bean id="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->

<property name="maxUploadSize" value="200000000" />

<property name="uploadTempDir" value="/temp"></property>

</bean>

设置文件上传功能,在控制器中我们可以需要返回Callable对象,代码如下:

@RequestMapping("/asyc")

public Callable<String> asychronized(HttpSession session,

final MultipartFile file)

{

final String path = session.getServletContext().getRealPath("/temp");

System.out.println("---进来了异步----" + Thread.currentThread().getId());

return new Callable<String>()

{

@Override

public String call() throws Exception

{

System.out.println(file.getBytes().length);

String oriName = file.getOriginalFilename();

System.out.println("originalname=" + oriName);

Thread.sleep(10000);

file.transferTo(new File(path, oriName));

System.out.println("线程唤醒了+保存成功+"

+ Thread.currentThread().getId());

//文件保存成功后返回的视图

return "redirect:e.jsp";

}

};

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: