SpringMVC上传文件FileUpload

我是在已经搭建好的springMVC环境下,maven工程中的pom.xml所需要的jar包(其中spring上传文件的两个主要jar:commons-fileupload.jar和commons-io.jar):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0modelVersion>
    <groupId>com.zhihuagroupId>
    <artifactId>SpringMVC_FileUploadartifactId>
    <packaging>warpackaging>
    <version>0.0.1-SNAPSHOTversion>
    <name>SpringMVC_FileUpload Maven Webappname>
    <url>http://maven.apache.orgurl>
    <properties>
        
        <spring.version>3.2.8.RELEASEspring.version>
        
        <junit.version>4.10junit.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>3.8.1version>
            <scope>testscope>
        dependency>
        
        <dependency>
            <groupId>commons-fileuploadgroupId>
            <artifactId>commons-fileuploadartifactId>
            <version>1.3.1version>
        dependency>
        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-coreartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-context-supportartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aopartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aspectsartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-txartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jdbcartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webartifactId>
            <version>${spring.version}version>
        dependency>
        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-testartifactId>
            <version>${spring.version}version>
            <scope>testscope>
        dependency>
        
        <dependency>
            <groupId>jstlgroupId>
            <artifactId>jstlartifactId>
            <version>1.2version>
        dependency>
        
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>javax.servlet-apiartifactId>
            <version>3.0.1version>
            <scope>providedscope>
        dependency>
        
        <dependency>
            <groupId>javax.servlet.jspgroupId>
            <artifactId>jsp-apiartifactId>
            <version>2.1version>
            <scope>providedscope>
        dependency>
    dependencies>
    <build>
        <finalName>SpringMVC_FileUploadfinalName>
    build>
project>

在spring-mvc.xml中添加代码:


    <bean id="multipartResolver" 
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8">property>
        <property name="maxUploadSize" value="10485760000">property>
        <property name="maxInMemorySize" value="40960">property>
    bean>

前端页面(fileUpload.jsp)和上传成功返回页面(success.jsp):

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>springmvc-文件上传title>
head>
<body>
    <h1>采用流的方式上传文件h1>
    <form name="form1" action="" method="post" enctype="multipart/form-data">
        <input type="file" name="file_01"/>
        <input type="submit" value="fileupload"/>
    form>
    <br>
    <h1>采用multipart提供的file.transfer方法上传文件1h1>
    <form name="form2" action="" method="post" enctype="multipart/form-data">
        <input type="file" name="file_02"/>
        <input type="submit" value="fileupload"/>
    form>
    <br>
    <h1>采用multipart提供的file.transfer方法上传文件2h1>
    <form name="form2" action="" method="post" enctype="multipart/form-data">
        <input type="file" name="file_03"/>
        <input type="submit" value="fileupload"/>
    form>
    <br>
    <h1>使用spring MVC提供的方法上传文件h1>
    <form name="form2" action="" method="post" enctype="multipart/form-data">
        <input type="file" name="file_03"/>
        <input type="submit" value="fileupload"/>
    form>
body>
html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
    <h2>文件上传成功!h2>
body>
html>

controller 的代码:

package com.zhihua.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
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("/fileUpload")
public class FileUploadController {

    /**
     * 通过流的方式上传文件
     * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
     * <请替换成功能描述> 
* <请替换成详细描述> * @param file * @return * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月5日] */
@RequestMapping("/upload_01") public String fileUpload_1(@RequestParam("file_01")CommonsMultipartFile file)throws IOException { //用来检测程序运行时间 long startTime = System.currentTimeMillis(); System.out.println("fileName:"+file.getOriginalFilename()); try{ //获取输出流 OutputStream os = new FileOutputStream("E:/"+new Date().getTime()+file.getOriginalFilename()); //获取输入流CommonsMultipartFile中可以直接得到文件的流 InputStream is = file.getInputStream(); int temp; //一个一个字节的读取并写入 while((temp=is.read())!=(-1)){ os.write(temp); } os.flush(); os.close(); is.close(); }catch(Exception e){ e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms"); return "view/success"; } /** * 采用file.Transto 来保存上传的文件 * <请替换成功能描述>
* <请替换成详细描述> * @param file * @return * @throws IOException * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月5日] */
@RequestMapping("/upload_02") public String fileUpload_2(@RequestParam("file_02") CommonsMultipartFile file)throws IOException { long startTime = System.currentTimeMillis(); System.out.println("fileName:"+file.getOriginalFilename()); String path = "E:/"+new Date().getTime()+file.getOriginalFilename(); File newFile = new File(path); //通过CommonsMultipartFile 的方法直接写文件 file.transferTo(newFile); long endTime = System.currentTimeMillis(); System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms"); return "view/success"; } /** * 使用MultipartFile上传文件 * <请替换成功能描述>
* <请替换成详细描述> * @param file * @return * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月5日] */
@RequestMapping("/upload_03") public String fileUpload_3(@RequestParam(value="file_03",required=false)MultipartFile file, HttpServletRequest request){ String path = request.getSession().getServletContext().getRealPath("upload"); System.out.println(path); String fileName = file.getOriginalFilename(); File targetFile = new File(path,fileName); if(!targetFile.exists()){ targetFile.mkdirs(); } //保存 try { file.transferTo(targetFile); }catch(Exception e){ e.printStackTrace(); } return "view/success"; } /** * 采用spring提供的上传文件的方法 * <请替换成功能描述>
* <请替换成详细描述> * @param request * @return * @throws IllegalStateException * @throws IOException * @author caizh * @since [1.0.0] * @version [1.0.0,2017年2月5日] */
@RequestMapping("/upload_spring") public String springUpload(HttpServletRequest request)throws IllegalStateException, IOException{ long startTime = System.currentTimeMillis(); //将当前上下文初始化给 CommonsMutipartResolver (多部分解析器) CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //检查form中是否有enctype="multipart/form-data" if(multipartResolver.isMultipart(request)) { //将request变成多request MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; //获取multiRequest中所有的文件名 Iterator iter = multiRequest.getFileNames(); while(iter.hasNext()){ //一次遍历所有的文件 MultipartFile file = multiRequest.getFile(iter.next().toString()); if(file!=null){ String path = "E:/springUpload"+file.getOriginalFilename(); //上传 file.transferTo(new File(path)); } } } long endTime = System.currentTimeMillis(); System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms"); return "view/success"; } }

好了,全部代码都给出了,博主是测试成功了,感兴趣的朋友可以去比较不同上传方式的效率!

你可能感兴趣的:(Spring相关)