前言
用springboot + jpa,批量上传、下载,一般批量下载处理方式都是将多个文件压缩成一个压缩包,然后在下载,主要的坑在于本地上传和下载都正常,部署在服务器上会出现各种错误,比如找不到路径,下载文件失败等等。
文件压缩工具类
见之前写的处理相关乱码的文章: springboot处理批量文件下载文件名和内容乱码问题
实体类
实体类中有关联关联的id,实际项目中一般上传下载都不会是一张表
package com.example.student.entity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
/**
* 描述:文件上传下载
*/
@Table(
name = "Document"
)
@Entity
@Getter
@Setter
@DynamicInsert//新增时空字段不去插入values
@DynamicUpdate//只跟新变化的字段,结合merge方法使用
@JsonInclude(JsonInclude.Include.NON_NULL)
@EntityListeners({
AuditingEntityListener.class})
@JsonIgnoreProperties({
"modifier", "modifyDate"})
public class Document implements BaseEntity {
@Id
@GeneratedValue
private Integer id;
@Column(columnDefinition = "int default 0")
private Integer companyId;//企业id
@Column(columnDefinition = "varchar(100) default ''")
private String name;//文件名
@Column(columnDefinition = "varchar(100) default ''")
private String path;//文件路径
@Column(columnDefinition = "varchar(20) default ''")
private String fileType;//文件类型
@Column(columnDefinition = "decimal(10,0) default 0")
private BigDecimal fileSize;//文件大小
@Column(columnDefinition = "int default 0")
private Integer downloadTimes;//下载次数
@Column(columnDefinition = "varchar(20) default ''")
private String creatorName;//创建人
@CreatedBy
private Integer creator;
@CreatedDate
private Date createDate;
@LastModifiedBy
private Integer modifier;
@LastModifiedDate
private Date modifyDate;
}
Controller层
package com.example.student.controller;
import com.example.student.criteria.DocumentCriteria;
import com.example.student.response.BaseEntity;
import com.example.student.service.DocumentServiceImpl;
import com.example.student.util.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;
/**
* 描述:文件管理
*/
@RestController
@RequestMapping("api/document")
public class DocumentController extends BaseController {
@Autowired
DocumentServiceImpl documentService;
/**
* 文件上传
*
* @param objId 所属id
* @param request 文件request
* @return
*/
@PostMapping("/upload")
public Object