文件的上传下载在web项目上经常用到,之前都是用别人写好的代码。工作之余自己也尝试写了上传下载的接口,以后项目中用到的话可以直接拿来用。本实例是在mysql上记录上传的文件信息,所以需要一个实体类。废话不多说,直接上菜:
1.开发环境:IDEA+JDK8+SpringBoot2.2.2+MongoDB
2.首先在pom文件引入MongoDB的依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
3.配置文件连接设置(我用的是本地的MongoDB没有设置用户名和密码):
data:
mongodb:
uri: mongodb://127.0.0.1:27017/test
servlet:
multipart:
#是否支持批量上传
enabled: true
#上传文件最大为 100M
max-file-size: 100MB
#上传总数据大小 200M
max-request-size: 200MB
4.实体类FileMetadata创建:
package com.example.demo.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.persistence.*;
import java.sql.Timestamp;
/**
* 保存在mongo中的文件,与各个相关实体比如申请工单、协议等关联
*/
@Data
@Entity
@Table(name = "file_metadata")
public class FileMetadata {
@Id
// 这应该不是数据库生成,而是mongo那边的ID
// @GeneratedValue(generator = "uuidMongoFiles")
// @GenericGenerator(name = "uuidMongoFiles", strategy = "uuid")
@Column(name = "id", columnDefinition = "varchar(128) COMMENT '编号'")
private String id;
@Column(name = "FILE_TYPE", columnDefinition = "varchar(20) COMMENT '文件类型,如资质文件、协议文件等'")
private String fileType;
@Column(name = "OBJECT_ID", columnDefinition = "varchar(128) COMMENT '关联的ID'")
private String associateId;
@Column(name = "OBJECT_CLASS", columnDefinition = "varchar(20) COMMENT '关联的实体类型'")
private String associateObjectClass;
@Column(name = "FILE_SEQ_NO", columnDefinition = "SMALLINT COMMENT '文件顺序'")
private Integer fileOrder;
@Column(name = "FILE_ORIGIN_NAME", columnDefinition = "varchar(255) COMMENT '上传文件原名'")
private String fileOriginName;
@Column(name = "FILE_DISPLAY_NAME", columnDefinition = "varchar(255) COMMENT '文件的标准展示名'")
private String fileDisplayName;
@Column(name = "FILE_YEAR", columnDefinition = "SMALLINT COMMENT '资料相关的年份'")
private Integer year;
@Column(name = "UPLOAD_TIME", columnDefinition = "timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间'")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone