【实用】【一眼就会】【直接可用】文件上传 附件上传 前后端分离 分布式 多文件上传 批量上传 上传附件 文件接口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;
    }


}

 

 

 

其实还可以改改,判断下文件类型等。

 

posted @ 2024-08-20 18:39  刘贵庆  阅读(1)  评论(0编辑  收藏  举报