SpringMVC上传与下载(IDEA工具)详细教程

     文件上传是当前企业项目中常用的一个功能,在Spring MVC框架中上传文件时将文件相关信息及操作封装到MultipartFile对象中,因此开发者只需要使用MultipartFile类型声明模型类的一个属性即可对被上传文件进行操作。本文主要通过图片上传实现SpringMVC文件上传的功能。

     本文核心的文件,包括:依赖文件(pom.xml)、项目的核心文件(web.xml)、springmvc核心文件(spring-mvc.xml)、控制层 Controller 类、相关的页面 等,具体的内容,如下:

1. 依赖:pom.xml

    <dependencies>
        <!--servlet依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!--spring基础依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.20</version>
        </dependency>
        <!--spring web依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.3.20</version>
        </dependency>
        <!--spring mvc 依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.20</version>
        </dependency>
        <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
    </dependencies>

2. springmvc核心配置文件

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

    <!--处理器映射器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

    <!--处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

    <!--处理器-->
    <context:component-scan base-package="com.laoma.controller"/>

    <!--
        文件上传的加载器:
        注意:id的内容必须是 multipartResolver
    -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--文件上传的最大值-->
        <property name="maxUploadSize" value="10485760"/>
    </bean>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

</beans>

3. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <!--前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
</web-app>

4. 控制层:Controller



import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.UUID;

@Controller
public class MyFileController {
    @RequestMapping("/fileupload")
    public String upload(MultipartFile myfile, HttpServletRequest request, Model model)throws Exception{
        //1. 获取本地的服务器目录(图片的存储目录)
        String path = request.getSession().getServletContext().getRealPath("upload");
        //2. 判断存储的目录是否存在
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
        //3. 获取文件原来的名称
        String old_name = myfile.getOriginalFilename();
        //4. 生成新的文件名
        String new_name = UUID.randomUUID().toString().replace("-","");
        String[] hzms = old_name.split("\\.");
        new_name = new_name + "." + hzms[hzms.length-1];
        //4. 图片的存储
        File targetFile = new File(path+"/"+new_name);
        myfile.transferTo(targetFile);
        //5. 获取文件的访问地址 http://localhost:8080/项目名
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
        String imgPath = "/upload/"+new_name;
        String imgHttp = basePath + imgPath;
        //6. 将图片回显到页面上
        model.addAttribute("imgHttp",imgHttp);
        model.addAttribute("fileName",new_name);
        return "/WEB-INF/show.jsp";
    }
    @RequestMapping("/download")
    public void downloadFile(String fileName,HttpServletRequest request,HttpServletResponse response)throws Exception{
        //-1.获取文件的资源路径
        String path = request.getSession().getServletContext().getRealPath("upload");
        //-2.文件的路径
        String filePath = path + "/" + fileName;
        //-3. 读取文件
        InputStream inputStream = new FileInputStream(filePath);
        //-4.1. 设置下载的模式(已附件的形式下载)
        response.setContentType("text/plain;charset=UTF-8");
        response.setHeader("content-disposition","attachment;fileName="+fileName);
        //-4.2 设置下载的模式(直接打开)
        //response.setHeader("content-disposition","inline;fileName="+fileName);
        //-5. 获取响应的输出流
        ServletOutputStream outputStream = response.getOutputStream();
        //-6. 处理下载流
        IOUtils.copy(inputStream,outputStream);
        //-7. 流的关闭
        IOUtils.closeQuietly(inputStream);
        IOUtils.closeQuietly(outputStream);
    }
}

5. 图片回显页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <img src="${imgHttp}"/>
    <a href="/download?fileName=${fileName}">下载</a>
</body>
</html>

问题: IDEA 对于图片回显是有问题的,需要单独进行idea的项目设置,如下

1. 在项目的 src/main/webapp下,手动创建文件夹 upload目录

2. 选择IDEA工具,选择File==》Project Structure==》Artifacts 中的输出目录改为:src/main/webapp 目录,如下图:

3. 修改tomcat的配置

3.1 打开tomcat的配置

3.2 进行tomcat外部源的配置

3.3 选择项目下的upload目录

3.4 选择之后的效果

3.4.1 这里显示的请求是:/upload,因此之前的controller中请求的映射不能使用/upload

3.4.2 点击 Apply ==》OK  即可

到此,整个idea下springmvc图片上传与回显的样例整理完毕!

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值