springmvc中web-xml中的配置
<servlet>
< servlet-name>DispatcherServlet</servlet-name>
< servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
< init-param>
< param-name>contextConfigLocation</param-name>
< param-value>
/WEB-INF/classes/dispatcherServlet.xml
< /param-value>
< /init-param>
< load-on-startup>1</load-on-startup>
< /servlet>
< servlet-mapping>
< servlet-name>DispatcherServlet</servlet-name>
< url-pattern>*.do</url-pattern>
< /servlet-mapping>
在spring的applicationContext.xml中配置:
<!-- 上传拦截,如最大上传值及最小上传值 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="10000000" /><!-- 10M -->
</bean>
在服务端有两种方式获取文件:
第一种:
@RequestMapping(value = "/jsp/test/upload", method = RequestMethod.POST)
// 将文件上传请求映射到该方法
public String handleFormUpload(// 设置请求参数的名称和类型
@RequestParam("file") CommonsMultipartFile mFile) { // 请求参数一定要与form中的参数名对应
if (!mFile.isEmpty()) {
log.info("上传文件的名字:" + mFile.getOriginalFilename());
// String path = this.servletContext.getRealPath("/tmp/");
// //获取本地存储路径
File file = new File("D:/myfile");
if (!file.exists()) file.mkdirs();
File file1 = new File("d:/myfile/" + new Date().getTime() + ".xls"); // 新建一个文件
try {
mFile.getFileItem().write(file1); // 将上传的文件写入新建的文件中
log.info("=======文件上传成功====");
} catch (Exception e) {
e.printStackTrace();
}
第二种 非注解的形式:
<!-- 启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注解的类成为spring的bean -->
<context:component-scan base-package="com.ultrapower.portal" />
< !-- 启动Spring MVC的注解功能 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
< /bean>
<bean id="fileUploadController" class="com.ultrapower.portal.controller.FileUploadController">
< property name="exceptionFlowService" ref="exceptionFlowService"></property>
< /bean>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
< property name="mappings">
< map>
< entry key="/home.do" value="homeController" />
<entry key="/jsp/upload.do" value="fileUploadController" />
< /map>
< /property>
< /bean>
<!-- 页面选择 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
< property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
< property name="prefix" value="/WEB-INF/jsp/" /> <!-- 前缀 -->
<property name="suffix" value=".jsp" /> <!-- 后缀 -->
< /bean>
@Override
protected ModelAndView defaultHandler(HttpServletRequest request, HttpServletResponse response) throws Exception {
String message = "";
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// List items = upload.parseRequest(request);
try {
List items = upload.parseRequest(request);// 上传文件解析
Iterator itr = items.iterator();// 枚举方法
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (item.isFormField()) {// 判断是文件还是文本信息
log.info("表单参数名:" + item.getFieldName() + ",表单参数值:" + item.getString("UTF-8"));
}
else {
if (item.getName() != null && !item.getName().equals("")) {// 判断是否选择了文件
// item.getName()返回上传文件在客户端的名称
log.info("上传文件的大小:" + item.getSize() + ";上传文件的类型:" + item.getContentType() + "上传文件的名称:"
+ item.getName());
// 此时文件暂存在服务器的内存当中 把文件保存在服务器上
//
// File tempFile = new File(item.getName());// 构造临时对象
// File file1 = new File("D:/xin");
// if (!file1.exists()) file1.mkdirs();
// File file = new File("D:/xin/",
// tempFile.getName());
// // if(file.getParentFile()==null)file.mkdirs();
// // 获取根目录对应的真实物理路径
// item.write(file);// 保存文件在服务器的物理磁盘中
// InputStream in = new FileInputStream(file);
// request.setAttribute("upload.message", "上传文件成功!");//
jsp页面:
<body>