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

springMVC系列之文件上传——06

2014-02-13 17:06 411 查看

springMVC系列之文件上传——06

        摘要:web开发、文件上传就像我们平时吃饭一样、少不了的功能。本文主要实现springMVC的两种实现方式:通过参数传递上传文件、通过解析request上传文件、强推后面一种。

 

一:实现功能

        1、通过参数传递形式上传文件

        2、通过解析request上传文件

二:具体步骤

        1、引入jar包、主要是两个



       2、不管是那种方式、首先要在springMVC的配置文件中配置有管springMVC对上传文件的处理的类springAnnotation-servlet.xml关于文件处理配置:

<!-- 配置springMVC处理上传文件的信息 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="10485760000" />
<property name="maxInMemorySize" value="40960" />
</bean>
        3、参数传递(详细信息代码有说明):

/**
* 参数接收形式上传文件
*/
@RequestMapping("/upload")
public String uploadFile(@RequestParam("file") CommonsMultipartFile file,
HttpServletRequest request) throws IOException {
System.out.println("fileName : " + file.getOriginalFilename());

if (!file.isEmpty()) {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("D:/" + file.getOriginalFilename()));
InputStream in = file.getInputStream();
BufferedInputStream bis = new BufferedInputStream(in);
int n = 0;
byte[] b = new byte[1024];
while ((n = bis.read(b)) != -1) {
bos.write(b, 0, n);
}
bos.flush();
bos.close();
bis.close();
}
return "/success";
}
        4、解析request(详细信息代码有说明):

/**
* springMVC封装的解析request上传文件(快捷、与springMVC很好结合,首选)
*/
@RequestMapping("/upload2")
public String uploadFile2(@RequestParam("file") CommonsMultipartFile file,
HttpServletRequest request) throws IOException {
// 定义解析器去解析request
CommonsMultipartResolver mutilpartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//request如果是Multipart类型、
if (mutilpartResolver.isMultipart(request)) {
//强转成 MultipartHttpServletRequest
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//获取文件名
Iterator<String> it = multiRequest.getFileNames();
while (it.hasNext()) {
//获取MultipartFile类型文件
MultipartFile fileDetail = multiRequest.getFile(it.next());
if (fileDetail != null) {
String fileName = "demoUpload" + fileDetail.getOriginalFilename();
String path = "D:/" + fileName;
File localFile = new File(path);
//将上传文件写入到指定文件出、核心!
fileDetail.transferTo(localFile);
//非常重要、有了这个想做什么处理都可以
//fileDetail.getInputStream();
}
}
}
return "/success";
}

补充

        1、整体结构图及jar包图

                     

                


        2、具体页面、Controller、springAnnotation-servlet.xml(嫌烦可无视)

                a) 上传页面 upload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="../js/jquery-1.7.1.min.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传文件</title>
<script type="text/javascript">

</script>
</head>
<body>
<h4>上传文件1</h4>
<form name="userForm" action="/springMVC7/file/upload2" method="post" enctype="multipart/form-data" >
选择文件:<input type="file" name="file">
<input type="submit" value="上传" >
</form>
</body>
</html>
                b)配置文件 springAnnotation-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 注解扫描包 -->
<context:component-scan base-package="com.chy.web.controller.annotation"></context:component-scan>

<!-- 优化一:使用mvc标签的代替下面的两个bean -->
<mvc:annotation-driven />
<!-- 不拦截静态资源 -->
<mvc:default-servlet-handler />

<!-- 开启注解 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean> -->

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

<!-- 配置springMVC处理上传文件的信息 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="10485760000" />
<property name="maxInMemorySize" value="40960" />
</bean>
</beans>
                c)处理上传文件的类 UploadController

package com.chy.web.controller.annotation.upload;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

@Controller
@RequestMapping("/file")
public class UploadController {
/*
* 上传文件的两种方法、 1、一种用参数接收 2、解析request
*/

/**
* 参数接收形式上传文件
*/
@RequestMapping("/upload")
public String uploadFile(@RequestParam("file") CommonsMultipartFile file,
HttpServletRequest request) throws IOException {
System.out.println("fileName : " + file.getOriginalFilename());

if (!file.isEmpty()) {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("D:/" + file.getOriginalFilename()));
InputStream in = file.getInputStream();
BufferedInputStream bis = new BufferedInputStream(in);
int n = 0;
byte[] b = new byte[1024];
while ((n = bis.read(b)) != -1) {
bos.write(b, 0, n);
}
bos.flush();
bos.close();
bis.close();
}
return "/success";
}

/**
* springMVC封装的解析request上传文件(快捷、与springMVC很好结合,首选)
*/
@RequestMapping("/upload2")
public String uploadFile2(@RequestParam("file") CommonsMultipartFile file,
HttpServletRequest request) throws IOException {
// 定义解析器去解析request
CommonsMultipartResolver mutilpartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//request如果是Multipart类型、
if (mutilpartResolver.isMultipart(request)) {
//强转成 MultipartHttpServletRequest
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//获取文件名
Iterator<String> it = multiRequest.getFileNames();
while (it.hasNext()) {
//获取MultipartFile类型文件
MultipartFile fileDetail = multiRequest.getFile(it.next());
if (fileDetail != null) {
String fileName = "demoUpload" + fileDetail.getOriginalFilename();
String path = "D:/" + fileName;
File localFile = new File(path);
//将上传文件写入到指定文件出、核心!
fileDetail.transferTo(localFile);
//非常重要、有了这个想做什么处理都可以
//fileDetail.getInputStream();
}
}
}
return "/success";
}

@RequestMapping("toUpload")
public String tpUpload() {
return "/upload";
}
}

更多内容: springMVC系列之目录——00

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