【实用】【一眼就会】【直接可用】文件上传 附件上传 前后端分离 分布式 多文件上传 批量上传 上传附件 文件接口api 附件接口 demo
思路:
1、先保存主要信息,存到数据库。
2、查询这条数据的 id、uid
3、上传附件功能:根据id、uid、文件。请求:附件API接口。
4、后端接口中:先判断登录状态,
5、创建对应的文件夹并存入文件,文件夹名以 id 名 命名。
6、把附件名重命名,以uuid命名。
7、把所有的文件路径放到集合里,传入id、uid 存入到数据库中。
前端:请求带有文件路径的json数据,直接去展示即可。访问路径可直接下载或展示。
先看效果:
接口:
代码:
package org.lgq.ai.controller; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Part; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.UUID; @RestController @Api(value = "文件上传下载接口", description = "对外接口API") @RequestMapping("/files") public class FilesController { @ResponseBody @RequestMapping(value = "/upload", method = RequestMethod.POST) public JSONObject filesUpload(HttpServletRequest request, @RequestParam("id") String id, @RequestPart("fileA") MultipartFile fileA, @RequestPart("fileB") MultipartFile fileB, @RequestPart("fileC") MultipartFile fileC) throws IOException, ServletException { //用id用户是否已登录,否则直接跳出。 //...... JSONObject json = new JSONObject(); String path = "D:\\youProject\\files\\" + id + "\\"; //生成一个以id命名的文件夹 Boolean ft = newIdFolder(path); if (ft) { //保存文件 int i = 0; //获取所有文件路径list List<String> filearr = new ArrayList<String>(); //获取上传状态提示: List<String> tiparr = new ArrayList<String>(); for (Part part : request.getParts()) { if (part.getSize() >= 7 * 1024 * 1024) { tiparr.add(part.getSubmittedFileName() + "文件太大,仅支持上传 7M 以内的文件。请重新上传。"); } else { part.getContentType(); part.getSize(); part.getSubmittedFileName(); part.getName(); if (part.getContentType() != null) { String fileurl = path + reFileName(part.getSubmittedFileName()); //文件存入本机文件夹中: part.write(fileurl); //获取所有文件路径: filearr.add(fileurl); //上传状态: tiparr.add(part.getSubmittedFileName() + "文件上传成功。"); i++; } else { request.getParameter(part.getName()); } } } //文件路径存入数据库中:(先保存主信息得到id,uid后上传文件) //xxxService.fileToDate(id,uid,filearr.toString()); if (i >= 1) { json.put("code", "200"); json.put("info", tiparr.toString()); } else { json.put("code", "500"); json.put("info", "上传失败。"); } } return json; } /** * 生成一个以id命名的文件夹 * * @param path */ private Boolean newIdFolder(String path) { File file = new File(path); return file.mkdirs(); } /** * 文件名称以uuid命名 * * @param filename * @return */ private String reFileName(String filename) { String uuid = UUID.randomUUID().toString().replaceAll("-", ""); String lastname = filename.split("\\.")[1]; return uuid + "." + lastname; } }
其实还可以改改,判断下文件类型等。