Springboot后端接口开发-文件上传下载接口
这里写目录标题
主要思路
在项目实训管理系统的开发过程中我们需要对于某些学生上传的阶段性报告进行保存,以及根据教师的需要进行查看,第一种想法是将文件以大文件形式直接保存到数据库,第二种是将文件上传到服务器端,然后由服务器在本地进行保存,数据库中只保存文件的相关信息以及保存的路径。这里我选择的是第二种。
具体实现
需要实现五个类
第一,连接数据库所需的实体类FileResource
import javax.persistence.*;
@Entity
@Table(name= "file_resource")
public class FileResource {
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public String getPath() {
return Path;
}
public void setPath(String Path){
this.Path=Path;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getFilename() {
return filename;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer id;
@Column(name = "file_path")
public String Path;
@Column(name = "filename")
public String filename;
}
第二生成工具类,为文件的上传做准备
package com.example.login.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileUtil {
public static void fileupload(byte[] file,String filePath,String fileName) throws IOException {
File targetfile = new File(filePath);
if(targetfile.exists()) {
targetfile.mkdirs();
}
FileOutputStream out = new FileOutputStream(filePath+fileName);
out.write(file);
out.flush();
out.close();
}
}
第三步继承JPA接口完成对于数据库操作的接口定义
package com.example.login.dao;
import com.example.login.entity.FileResource;
import com.example.login.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.net.UnknownServiceException;
public interface UserDAO extends JpaRepository<User,String> {
}
第四步
生成FileResourceService
import java.io.IOException;
import com.example.login.dao.FileDAO;
import com.example.login.utils.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ClassUtils;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.example.login.entity.FileResource;
@Service
public class FileResourceService {
@Autowired
private FileDAO filePathRepository;
public String Upload(@RequestParam("file") MultipartFile file) {
if(!file.isEmpty()) {
String fileName = file.getOriginalFilename();
String path = ClassUtils.getDefaultClassLoader().getResource("").getPath()+"static/";
//此路径可以自己定义,这样设置的话可以在自创的target/classes/static目录下保存,
//在前端可以直接通过URL方式进行访问
try {
FileUtil.fileupload(file.getBytes(), path, fileName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileResource biaopath = new FileResource();
biaopath.setFilename(fileName);
biaopath.setPath("http://localhost:8181/"+fileName);
filePathRepository.save(biaopath);
}
return "success";
}
}
第五步
添加controller,提供上传服务
package com.example.login.controller;
import com.example.login.service.FileResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class FileUploadController {
@Autowired
private FileResourceService filePathService;
@RequestMapping("/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
return filePathService.Upload(file);
}
}
postman运行截图
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/17788.html