SpringMVC:用MultipartFile上传单个文件,多个文件 - Go语言中文社区

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


单个文件上传开发步骤:

1.添加Apache文件上传jar包

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


2.配置MultipartResolver处理文件

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

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

属性介绍:
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 File</title>
</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.运行单个文件上传结果

成功:
上传成功
失败:
上传失败


多个文件上传开发步骤:

步骤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 File</title>
</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运行多个文件上传结果

上传:
这里写图片描述
结果:
这里写图片描述


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为准;同时指定连接超时时长,读取文件超时时长。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u014746965/article/details/78772896
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-16 12:45:01
  • 阅读 ( 936 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢