spring mvc 上传文件

package com.minx.crm.web.controller;

import java.io.File;
import java.io.FileNotFoundException;
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
public class SpringMVC006 {

    /*
     * 通过流的方式上传文件 @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile
     * 对象
     */
    @RequestMapping("/fileUpload")
    public String fileUpload(@RequestParam("file")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 (FileNotFoundException e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("方法一的运行时间:" + String.valueOf(endTime - startTime)+ "ms");
        return "/success";
    }

    /*
     * 采用file.Transto 来保存上传的文件
     */
    @RequestMapping("/fileUpload2")
    public String fileUpload2(@RequestParam("file") 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 "/success";
    }
    
    
    /*
     * 采用spring提供的上传文件的方法
     */
    @RequestMapping("/springUpload")
    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 "/success";
    }

}


jsp    页面  推荐使用下面的两个方法。第一个忒慢了


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <base href="<%=basePath%>">

        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
    </head>

    <body>

        <form name="serForm" action="fileUpload.do" method="post"
            enctype="multipart/form-data">
            <h1>
                采用流的方式上传文件
            </h1>
            <input type="file" name="file">
            <input type="submit" value="upload" />
        </form>

        <form name="Form2" action="fileUpload2.do" method="post"
            enctype="multipart/form-data">
            <h1>
                采用multipart提供的file.transfer方法上传文件
            </h1>
            <input type="file" name="file">
            <input type="submit" value="upload" />
        </form>

        <form name="Form2" action="springUpload.do" method="post"
            enctype="multipart/form-data">
            <h1>
                使用spring mvc提供的类的方法上传文件
            </h1>
            <input type="file" name="file">
            <input type="submit" value="upload" />
        </form>
    </body>
</html>



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值