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


}

其实还可以改改,判断下文件类型、输入日志、上传状态、加入时间、存入名称等等。

其实上述代码只是个demo,若用到实际工作中还有多处需要改进的。

标签: 多附件上传 , 文件上传 , 附件接口api

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值