文件上传到服务器数据写入数据库,从服务器数据库下载文件

文件上传下载的逻辑代码:

package com.myapestech.project.common;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.myapestech.project.entity.project.FileInfo;
import com.myapestech.project.mapper.project.FileInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/api/local/file")
public class FileLocalController {
    @Autowired
    private FileInfoMapper fileInfoMapper;

    @Resource
    private ObjectMapper objectMapper;

    @PostMapping("/upload")
    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            // 获取文件信息
            String fileName = file.getOriginalFilename();
            long fileSize = file.getSize();
            String fileType = file.getContentType();
            byte[] fileContent = file.getBytes();

            // 创建FileInfo实体
            FileInfo fileInfo = new FileInfo();
            fileInfo.setFileName(fileName);
            fileInfo.setFileSize(fileSize);
            fileInfo.setFileType(fileType);
            fileInfo.setFileContent(fileContent);

            // 将文件信息保存到数据库
            fileInfoMapper.insert(fileInfo);
            Map<String,Object> result = new HashMap<>();
            result.put("msg","文件上传成功");
            result.put("fileId",fileInfo.getId());
            String jsonString = objectMapper.writeValueAsString(result);
            return ResponseEntity.ok(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败");
        }
    }

    @GetMapping("/download")
    public void downloadFile(@RequestParam("id") String id, HttpServletResponse response) {
        try {
            // 从数据库获取文件信息
            FileInfo fileInfo =  fileInfoMapper.selectById(id);

            // 设置响应头
            response.setContentType(fileInfo.getFileType());
            response.setHeader("Content-disposition", "attachment; filename=" + fileInfo.getFileName());
            response.setHeader("Content-Length", String.valueOf(fileInfo.getFileSize()));

            // 写入文件内容
            response.getOutputStream().write(fileInfo.getFileContent());
        } catch (Exception e) {
            e.printStackTrace();
            // 返回错误响应
            response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
        }
    }


}

文件持久层

package com.myapestech.project.mapper.project;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.myapestech.project.entity.project.FileInfo;

/**
 * @author Kra丶*
 * @apiNote 文件持久层
 * @date 2023/5/2 21:08
 */
public interface FileInfoMapper extends BaseMapper<FileInfo> {


}

文件实体类

package com.myapestech.project.entity.project;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;

/**
 * @author Kra丶
 */
@Data
@TableName("t_file_info")
public class FileInfo implements Serializable {
    // 主键
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    // 文件名
    private String fileName;
    // 文件大小
    private long fileSize;
    // 文件类型
    private String fileType;
    // 文件内容
    private byte[] fileContent;

}

调用上传接口
![在这里插入图片描述](https://img-blog.csdnimg.cn/8241c4f5963f498e9743d7478b5c85ca.png
数据保存到数据库
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值