文件上传下载的逻辑代码:
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;
}
调用上传接口
数据保存到数据库