其他分享
首页 > 其他分享> > springmvc文件上传

springmvc文件上传

作者:互联网

xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <context:component-scan base-package="com.sy"></context:component-scan>
    <mvc:annotation-driven/>
    <!--
        由于在SpringMVC的前端控制器中,将url-pattern设置为了/
        此时前端控制器不仅会处理Controller中的请求,也会讲静态资源
        当作时Controller请求进行处理,这个是不正确的
        所以通过该配置,可以让静态资源直接放行,控制器请请求在此处才被前端控制器处理
    -->
    <mvc:default-servlet-handler/>
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--
        注册文件上传组件
    -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--
            多文件上传时每个文件的大小上限(单位:字节)
        -->
        <!--<property name="maxUploadSizePerFile" value=""></property>-->
        <!--
            所有文件上传时的总大小上限(单位:字节)
            因为mvc框架内部规范了上传命名,所以bean id一定要写成multipartResolver
        -->
        <property name="maxUploadSize" value="10485760"></property>
    </bean>
</beans>

上传文件的包依赖

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sy</groupId>
    <artifactId>SpringMVC_0315</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.18</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.24.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.24.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <port>8888</port>
                    <path>/</path>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>

        </plugins>
    </build>
</project>

controller层代码

package com.sy.controller;

import com.sy.dto.Result;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;

@Controller
@RequestMapping("upload")
public class UploadController {

    /**
     * 文件上传目录的路径
     * TODO:可以配置在properties中,通过@Value注解注入
     */
    private static final String UPLOAD_DIR = "d:\\imgs\\";

    /**
     * 使用表单方式上传文件
     *
     * @param file 上传的文件对象,参数名必须和前端file组件的name保持一致
     * @return
     */
    @RequestMapping("formUpload")
    public String formUpload(@RequestParam(value = "file") MultipartFile file) {
        //文件的大小
        // System.out.println(file.getSize());
        //文件的原始名称
        //System.out.println(file.getOriginalFilename());
        //前端页面中文件域的名称
        //System.out.println(file.getName());
        //文件对应的输入流
        //System.out.println(file.getInputStream());

        //1.判断保存上传文件的目录是否存在,如果不存在,则创建之
        File saveDir = new File(UPLOAD_DIR);
        if (!saveDir.exists()) {
            saveDir.mkdirs();
        }

        //2.构建保存时文件的文件名:uuid+.+原来文件的类型
        String oldFileName = file.getOriginalFilename();

        String newFileName = UUID.randomUUID().toString().replace("-", "") + "."
                + oldFileName.substring(oldFileName.lastIndexOf(".") + 1);

        //3.将上传以后的文件对应的输入流拷贝到服务器文件对应的输出流
        // --文件上传的本质

        try (InputStream is = file.getInputStream();
             OutputStream os = new FileOutputStream(UPLOAD_DIR + newFileName);
        ) {
            FileCopyUtils.copy(is, os);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "hello";
    }

    /**
     * 基于表单的多文件上传
     * 注意:如果是多个文件,则将其设置为数组类型
     */
    @RequestMapping("formUploadSeveral")
    public String formUploadSeveral(@RequestParam(value = "file") MultipartFile[] file) {
        if (file != null) {
            for (MultipartFile f : file) {
                //1.判断保存上传文件的目录是否存在,如果不存在,则创建之
                File saveDir = new File(UPLOAD_DIR);
                if (!saveDir.exists()) {
                    saveDir.mkdirs();
                }

                //2.构建保存时文件的文件名:uuid+.+原来文件的类型
                String oldFileName = f.getOriginalFilename();

                String newFileName = UUID.randomUUID().toString().replace("-", "") + "."
                        + oldFileName.substring(oldFileName.lastIndexOf(".") + 1);

                //3.将上传以后的文件对应的输入流拷贝到服务器文件对应的输出流
                // --文件上传的本质
                try (InputStream is = f.getInputStream();
                     OutputStream os = new FileOutputStream(UPLOAD_DIR + newFileName);
                ) {
                    FileCopyUtils.copy(is, os);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return "hello";
    }

    /**
     * ajax上传
     */
    @RequestMapping("ajaxUpload")
    @ResponseBody
    public Result ajaxUpload(@RequestParam("file") MultipartFile file) {
        Result result = new Result();

        //1.判断保存上传文件的目录是否存在,如果不存在,则创建之
        File saveDir = new File(UPLOAD_DIR);
        if (!saveDir.exists()) {
            saveDir.mkdirs();
        }

        //2.构建保存时文件的文件名:uuid+.+原来文件的类型
        String oldFileName = file.getOriginalFilename();

        String newFileName = UUID.randomUUID().toString().replace("-", "") + "."
                + oldFileName.substring(oldFileName.lastIndexOf(".") + 1);

        //3.将上传以后的文件对应的输入流拷贝到服务器文件对应的输出流
        // --文件上传的本质
        try (InputStream is = file.getInputStream();
             OutputStream os = new FileOutputStream(UPLOAD_DIR + newFileName);
        ) {
            FileCopyUtils.copy(is, os);
        } catch (Exception e) {
            result.setCode(500);
            result.setError("文件上传出错");
            e.printStackTrace();
        }
        //TODO:如果成功上传,可以在json中携带用来显示图片的url路径
//        result.setData("路径");
        return result;
    }
}

前端测试(一定要写上enctype=“multipart/form-data”)

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2019/8/12
  Time: 10:12
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上传</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/upload/formUpload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>
<hr/>
<form action="<%=request.getContextPath()%>/upload/formUploadSeveral" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="file" name="file">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>
</body>
</html>

ajax测试

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>基于Ajax进行文件上传</title>
    <link rel="stylesheet" href="/layui/css/layui.css" media="all">
    <script type="text/javascript" src="/layui/layui.js"></script>
</head>
<body>
<button type="button" class="layui-btn" id="test1">
    <i class="layui-icon">&#xe67c;</i>上传图片
</button>
</body>
<script>
    var serverPath = "http://localhost:8888/";
    layui.use('upload', function () {
        var upload = layui.upload;

        //执行实例
        var uploadInst = upload.render({
            elem: '#test1' //绑定元素
            , url: serverPath + 'upload/ajaxUpload' //上传接口
            , done: function (res) {
                //上传完毕回调
                console.log(res);
            }
            , error: function () {
                //请求异常回调
            }
        });
    });
</script>
</html>

标签:文件,springmvc,saveDir,file,import,org,上传
来源: https://blog.csdn.net/weixin_43343423/article/details/99295429