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
    评论
基于SpringMVC+Spring+MyBatis开发的个人博客网站-毕业设计.zip 一、关于项目 该博客是基于SSM实现的个人博客系统,适合初学SSM和个人博客制作的同学学习。主要技术架构包括Maven、SpringMVCSpring、MyBatis、Thymeleaf、Redis等。前端采用Bootstarp和Semantic UI。 二、使用步骤 Fork项目 fork或者下载项目到本地(建议先fork到自己仓库,在通过码云导入仓库下载,实测下载速度可以)。完整项目源码,可以使用IDEA导入。数据库文件请先创建数据库,然后以运行sql文件方式导入 导入数据库 新建数据库blog,导入数据库blog.sql。注意,数据库的编码和排序规则是utf-8和utf-8_general_ci。数据库默认用户名 root,密码 123456 启动redis服务,并在redis.properties配置你的redis 修改项目中的数据库连接信息 修改 db.properties 文件,该文件很容易找到,在 src/main/resources 中。里面有 MySQL 数据库连接信息,请确保已安装和启动 MySQL。注意修改数据库地址、表名、用户名和密码。 db.properties 文件中databasePath表示每周日进行数据库备份的路径,可自行修改 后台sql文件中管理员账户为admin,密码为:111111 三、使用注意 开发工具的选择 请使用 IntelliJ IDEA, 尽量不要用 Eclipse/MyEclipse。后者可能要折腾一会儿 确保你安装了 Maven(如果maven加载pom报错,发现不是自己配置的maven,请到setting中修改成自己的maven仓库) 本项目有使用到redis,所以运行项目前先启动redis服务,并在redis.properties配置你的redis 请给你的IDE安装Lombok插件 实体类中多次使用到 @Data 注解,请确保你的 IDE 安装了 Lombok 插件,否则找不到 getter/setter 方法 数据库乱码,在MySQL安装路径,比如(E:\MySQL\MySQL Server 5.5)下找到my.ini文件进入编辑,修改这两处地方为utf8,默认是拉丁文 character-set-server=utf8 default-character-set=utf8 本项目使用到的mail服务可在mail.properties中配置,不配置的话不影响整体,只是使用不了邮件服务。 本项目原本使用的是阿里云oss服务,现已修改成图片上传到本地服务器,如果需要可以在db.properties中进行阿里云配置 二、效果预览 预览地址:https://islizx.cn 前台效果图就不展示了,可前往网站浏览 介绍几张后台的页面 后台首页 DashBoard 文章列表 编辑文章(MarkDown编辑器) 文章类型管理 页面管理(可以自定义页面,申请友链和留言板即为自定义页面) 公告管理 附件管理(点击附件可以查看详细信息以及删除操作) 评论管理(管理员回复回收站和待审核的评论后直接通过审核并发送邮件给评论者) 轮播图管理(即首页的轮播图,轮播图可另外链接到其它页面,比如文章或公告) 小工具管理(即首页右侧的bar) 友链管理 日志管理
基于SpringMVC+Hibernate4的考勤管理系统+.zip 项目环境 系统:Windows7 X64位系统 IDE:Intellij IDEA 14.0 后端技术选型 J D K 版 本:JDK 1.8 数 据 库:Mysql 5.7 WEB容器:Tomcat 7.0 视图框架:SpringMVC 4.3.6.RELEASE 核心框架:Spring Framework 4.3.6.RELEASE 持久层框架:Hibernate4.3.11.Final 数据库连接池:C3P0 工具类 Apache fileupload 文件上传组件 Apache commons-collections 封装好的各种集合类和集合工具类 Apache commons-io Apache基金会创建并维护的Java函数库 Apache commons-logging 通用的日志接口 dom4j 优秀的JavaXML API 主要用于解析XML文档 poi组件 主要用于读取以及写入Microsoft Office格式档案 JSR 303 为实体验证定义了一个元数据模型和API 前端技术选型 JS框架:jQuery 1.8 CSS框架:Twitter Bootstrap 项目所需jar包列表 antlr-2.7.7.jar classmate-1.0.0.jar com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar commons-collections4-4.0.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-logging-1.1.3.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.11.Final.jar hibernate-entitymanager-4.3.11.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar hibernate-validator-5.1.3.Final.jar hibernate-validator-annotation-processor-5.1.3.Final.jar jandex-1.1.0.Final.jar javassist-3.18.1-GA.jar jboss-logging-3.1.3.GA.jar jboss-logging-annotations-1.2.0.Beta1.jar jboss-transaction-api_1.2_spec-1.0.0.Final.jar jstl-1.2.jar mysql-connector-java-5.1.7-bin.jar poi-3.15.jar poi-examples-3.15.jar poi-excelant-3.15.jar poi-ooxml-3.15.jar poi-ooxml-schemas-3.15.jar poi-scratchpad-3.15.jar spring-aop-4.0.0.RELEASE.jar 使用Spring 的AOP 特性时所需的类和源码级元数据支持 spring-aspects-4.0.0.RELEASE.jar 提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中 spring-beans-4.0.0.RELEASE.jar 所有应用都要用到的,它包含访问配置文件、创建和管理bean spring-context-4.0.0.RELEASE.jar Spring 核心提供了大量扩展 spring-core-4.0.0.RELEASE.jar Spring 框架基本的核心工具类,是其它组件的基本核心 spring-expression-4.0.0.RELEASE.jar Spring表达式语言 spring-jdbc-4.0.0.RELEASE.jar 对Spring 对JDBC 数据访问进行封装的所有类 spring-orm-4.0.0.RELEASE.jar Spring对DAO特性集进行了扩展 spring-tx-4.0.0.RELEASE.jar 事务相关的类 spring-web-4.0.0.RELEASE.jar Web 应用开发时,用到Spring 框架时所需的核心类 spring-webmvc-4.0.0.RELEASE
SpringMVCSpring和MyBatis是一种常见的JavaWeb开发框架组合,通过整合这三个开源框架,可以方便地进行Web应用的开发。下面是一个简要的整合教程: 1. 创建一个Maven项目,并在pom.xml中添加相应的依赖: - SpringMVC依赖:spring-webmvc、spring-context、spring-beans等。 - Spring依赖:spring-core、spring-context、spring-aop等。 - MyBatis依赖:mybatis、mybatis-spring、mysql-connector-java等。 2. 创建一个SpringMVC配置文件,如springmvc-servlet.xml,配置SpringMVC的相关信息,并将其配置在web.xml中: ```xml <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 3. 创建一个Spring配置文件,如applicationContext.xml,配置Spring的相关信息: ```xml <context:component-scan base-package="com.example.package" /> <mvc:annotation-driven /> <!-- 配置数据源、事务管理器等 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- 数据源相关配置 --> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> ``` 4. 创建一个MyBatis配置文件,如mybatis-config.xml,配置MyBatis的相关信息: ```xml <configuration> <typeAliasesPackage>com.example.package</typeAliasesPackage> <!-- 配置数据源、事务管理器等 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- 数据源相关配置 --> </dataSource> </environment> </environments> <!-- 配置映射文件 --> <mappers> <mapper resource="com/example/package/mapper/ExampleMapper.xml"/> </mappers> </configuration> ``` 5. 创建DAO接口和Mapper映射文件,定义数据访问操作。 6. 创建Service类和Controller类,实现业务逻辑和请求处理。 7. 配置数据库连接信息、事务管理、数据访问等相关配置。 通过以上步骤,我们就完成了SpringMVCSpring和MyBatis的整合。在此基础上,我们可以根据实际需求,进一步开发完善的Web应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值