springboot文件上传和下载(批量/单个)

本文介绍了使用SpringBoot结合JPA实现文件的批量上传和下载功能,特别是如何处理批量下载时的文件压缩。在实现过程中,可能会遇到如本地与服务器环境差异导致的路径找不到、下载失败等问题,作者分享了克服这些困难的经验。
摘要由CSDN通过智能技术生成

前言

用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 
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值