聊一聊SSM中文件的上传和下载

本文详细探讨了SSM(Spring、SpringMVC、MyBatis)框架下文件上传和下载的实现过程。从文件上传的逻辑分析、数据库设计、接口服务、前端页面的实现,到文件下载的两种方法,作者通过实例代码和步骤演示了整个流程。同时,文章还揭示了在Chrome浏览器预览文件路径问题和MySQL数据包大小限制的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开始了一个新的项目,在这个项目中有很多对文件的操作,其实文件的上传已经不是什么新鲜的事儿了。作为一名开发者我自己也不是第一次处理文件方面的操作了,但是总是感觉自己对这些操作还不够熟练,仿佛有一层神秘的面纱没有被揭开,所以希望今天能将这个问题来总结一下,以便在日后的工作中能够拈手就来。

一、首先我们先来分析一下文件的上传过程

一个本地的文件上传到服务器中的过程:

     首先我们要有一个界面可以让我们操作我们本地的文件

     然后这个界面需要将我们选择的文件信息传递给一个逻辑处理中心(也就是我们的后台接口服务)

     后台的接口服务程序接收到文件后需要对文件进行处理(比如我们要判断这个文件的类型、文件的大小、文件名称等一些信息)

    处理完成之后我们需要选择文件的持久化方式,是需要存入数据库里面还是存入文件服务器的文件夹中,这一步是根据自己的实际需求决定

    将文件存入服务器文件夹或者数据库中,操作就完成了

简单地做了个流程图:

二、文件上传的具体实现

1.前提条件

首先我们需要一个页面可以选择上传的文件,然后我们需要一个可以接收到文件对象的接口,最后我们还需要一个存放文件的服务器。在这篇文章里面作者采用的技术:页面——jsp和html;接口——SSM框架技术;数据库——mysql 5.7.20。

因为这次我们是分析对文件的操作,所以不细讲上面这些技术的使用。

2.设计逻辑思路

我采用的逻辑是:数据库——>接口——>页面——>测试

从底层数据库的表开始设计,然后处理接口和配置,再然后编写页面,最后千万不能忘了测试一把。

3.数据库设计

数据库的设计其实比较简单,直接在数据库中新建一张表就行了。

下面我贴一下sql代码:

CREATE TABLE `NewTable`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `up_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `up_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `up_time` datetime(0) NOT NULL,
  `up_content` blob NULL,
  `up_desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
)

这段代码我自己测试过,没问题!

4.接口服务

数据库表建好之后我们可以建一个与表相关的实体对象类

import java.util.Date;

/**
 * Created by Viking on 2019/3/3
 */
public class FileUpload {
    public Integer id;
    public String upName;
    public String upType;
    public Date upTime;
    public byte[] upContent;
    public String upDesc;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUpName() {
        return upName;
    }

    public void setUpName(String upName) {
        this.upName = upName;
    }

    public String getUpType() {
        return upType;
    }

    public void setUpType(String upType) {
        this.upType = upType;
    }

    public Date getUpTime() {
        return upTime;
    }

    public void setUpTime(Date upTime) {
        this.upTime = upTime;
    }

    public byte[] getUpContent() {
        return upContent;
    }

    public void setUpContent(byte[] upContent) {
        this.upContent = upContent;
    }

    public String getUpDesc() {
        return upDesc;
    }

    public void setUpDesc(String upDesc) {
        this.upDesc = upDesc;
    }
}

在SSM项目中上传文件还要先配置一下spring-mvc.xml

也贴一下配置的代码:

 <!--配置视图解析器,访问WEB-INF下面的资源文件-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--在jsp文件中需要导入外部js库(jquery等)-->
    <mvc:resources location="/lib" mapping="/lib/**"/>
    <!--servlet默认处理器,在web.xml文件中映射地址为*.js-->
    <mvc:default-servlet-handler/>
    <!--  配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包  -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--  默认编码  -->
        <property name="defaultEncoding" value="utf-8"/>
        <!--  文件大小最大值  -->
        <property name="maxUploadSize" value="10485760000"/>
        <!--  内存中的最大值  -->
        <property name="maxInMemorySize" value="40960"/>
    </bean>

如果要访问静态资源,那么还需要在web.xml文件中添加以下配置:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.css</url-pattern>
    <url-pattern>*.jpg</url-pattern
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值