SpringMVC:用MultipartFile上传单个文件,多个文件

单个文件上传开发步骤:

1.添加Apache文件上传jar包

首先需要下载两个apache上传文件的jar包
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
具体使用版本,请根据项目进行选择。


2.配置MultipartResolver处理文件

SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file。

    id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="5400000" />
        <property name="defaultEncoding" value="UTF-8" />
    

属性介绍:
maxUploadSize:最大上传文件的大小,单位为字节;
defaultEncoding:请求的编码格式,默认为iso-8859-1。


3.编写文件上传控制器

@Controller
public class FileUploadController {

    private static String UPLOAD_DIRECTORY = PropertiesUtil.get("fileupload.directory", "");

    @RequestMapping(value = "uploadFile", method = RequestMethod.POST)
    public ModelAndView uploadFile(@RequestParam("file") MultipartFile file){
        // 判断文件是否为空
        if (!file.isEmpty()) {
            try {
                //判断文件目录是否存在,否则自动生成
                File directory = new File(UPLOAD_DIRECTORY);
                if (!directory.exists()){
                    directory.mkdirs();
                }

                //失败跳转视图
                if (file.getSize() > 30000)
               return new ModelAndView("uploadFail","msg",file.getOriginalFilename()+"超过了指定大小");

                // 文件保存路径
                String filePath =  FilenameUtils.concat(UPLOAD_DIRECTORY, file.getOriginalFilename());
                // 转存文件
                file.transferTo(new File(filePath));

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        //成功跳转视图
        return new ModelAndView("uploadSuccess","msg",file.getOriginalFilename());
    }

}


说明:
1>使用SpringMVC注解@RequestParam来获取表单中的file参数内容;
2>通过MultipartFile的transferTo(File dest)这个方法来直接转存文件到指定的路径。


4.书写前段测试表单

upload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Upload Filetitle>
head>
<body>
    <h2>文件上传实例h2>
    <form action="/uploadFile" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="file">
        <input type="submit" value="提交">
    form>
body>
html>

uploadSuccess.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传成功title>
head>
<body>
    <h1>文件${msg}上传成功!h1>
body>
html>

uploadFail.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传失败title>
head>
<body>
    <h1>上传失败原因:${msg}h1>
body>
html>


  注意要在form标签中加上enctype=”multipart/form-data”表示该表单是要处理文件的,这是最基本的东西,很多人会忘记然而当上传出错后则去找程序的错误,却忘了这一点


5.运行单个文件上传结果

成功:
SpringMVC:用MultipartFile上传单个文件,多个文件_第1张图片
失败:
SpringMVC:用MultipartFile上传单个文件,多个文件_第2张图片


多个文件上传开发步骤:

步骤1,2都是相同的,只是步骤3,4有些许不同。

3.1多个文件上传控制器

    /**
     * 多个文件上传
     * @param files
     * @return
     */
    @RequestMapping(value = "uploadFiles", method = RequestMethod.POST)
    public ModelAndView uploadFile(@RequestParam("files") MultipartFile[] files){
        //判断file数组不能为空并且长度大于0
        if (files != null && files.length > 0) {
            //循环获取file数组中得文件
            for (int i = 0; i < files.length; i++) {
                MultipartFile file = files[i];

                //保存文件
                String filePath = FilenameUtils.concat(UPLOAD_DIRECTORY, file.getOriginalFilename());
                // 转存文件
                try {
                    file.transferTo(new File(filePath));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        //跳转视图
        return new ModelAndView("uploadSuccess","msg",files.length+"个文件");
    }

4.1多个文件上传表单

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Upload Filetitle>
head>
<body>
    <h2>多个文件上传实例h2>
    <form action="/uploadFiles" method="post" enctype="multipart/form-data">
        <p> 选择文件:<input type="file" name="files">
        <p> 选择文件:<input type="file" name="files">
        <p> 选择文件:<input type="file" name="files">
        <input type="submit" value="提交">
    form>
body>
html>


说明:
  前端表单,多个文件组使用同一个name名称:files,后台控制器使用@RequestParam(“files”) MultipartFile[] files 数组来接收。


5.1运行多个文件上传结果

上传:
SpringMVC:用MultipartFile上传单个文件,多个文件_第3张图片
结果:
SpringMVC:用MultipartFile上传单个文件,多个文件_第4张图片


Github上源码:https://github.com/ChasingLight/SpringDataJPA.git

扩充:

1>MultipartFile常用方法

打印方法结果:
1>文件类型值,MultipartFile.getContentType():image/jpeg
2>表单中文件组件对应name值,MultipartFile.getName():file
3>文件原始名称包括后缀名,MultipartFile.getOriginalFilename():IMEI_20171204.jpg
4>文件大小单位为k,MultipartFile.getSize():27128
5>文件是否为空,MultipartFile.isEmpty():false

2>Apache文件相关jar包常用方法

1>FilenameUtils.concat(basePath, fullFileName):用于拼接目录和文件名为文件全路径,且会根据系统对应使用相应的分隔符
2>FileUtils.copyURLToFile(URL source, File destination, int connectionTimeout, int readTimeout):
从指定的url下载文件,保存到destination为准;同时指定连接超时时长,读取文件超时时长。

你可能感兴趣的:(SSH框架)