首页 > 其他分享 >【实用】【一眼就会】【直接可用】文件上传 附件上传 前后端分离 分布式 多文件上传 批量上传 上传附件 文件接口api 附件接口 demo

【实用】【一眼就会】【直接可用】文件上传 附件上传 前后端分离 分布式 多文件上传 批量上传 上传附件 文件接口api 附件接口 demo

时间:2024-08-20 18:38:19浏览次数:7  
标签:文件 String part 附件 import 上传 id

思路:

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;
    }


}

 

 

 

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

 

标签:文件,String,part,附件,import,上传,id
From: https://www.cnblogs.com/liuguiqing/p/18370058

相关文章

  • 点击按钮实现文件导入/文件上传
    <el-uploadref="upload":accept="上传什么类型的文件"action="faker":limit="1":show-file-list="false":on-change="handleCha......
  • 织梦dedecms主页在哪个文件
    DedeCMS的首页模板文件位置:/templets/default/index.html。其中default文件夹是默认的,如果你用的是其他模版,在后台可以查看的,进入后台>系统>系统基本参数>模板默认风格,后面的default就是当前使用的模板,首页文件就在这里面。织梦内容管理系统(DedeCms)以简单、实用、开源而闻名,是......
  • Powershell 调用cmd 运行exe、bat、jar文件
    1.配置路径$nginxPath="C:\path\to\nginx"$redisPath="C:\path\to\redis"$ruoyiAdminJarPath="C:\path\to\ruoyi-admin"2.exe文件,cd到exe所在文件夹,然后执行Write-Output"启动Nginx..."Start-Process-FilePath"cmd.......
  • python ssh上传文件到linux并解压
    importparamikoimportosdefupload_and_unzip(local_file,remote_file,zip_dir):#创建SSH客户端ssh=paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())private_key_path=r'F:\mysite.pem'#加载私钥文件......
  • C# Deflate压缩字节数组(和java压缩结果一样)利用zlib.net对文件进行压缩
    今天在对接一个三方接口时,需要传一个附件数据,附件需要使用Deflate压缩算法压缩后的文件二进制流,再进行base64编码后的字符串。刚开始使用的官方自带的System.IO.Compression.DeflateStream方式,结果不管怎么改变CompressionLevel级别,压缩结果始终和java的压缩结果不一致,结果不一致......
  • 前端如何处理xml配置文件?
    OpenSNN开思通智网,官网地址:https://w3.opensnn.com/2024年8月份“O站创作者招募计划”快来O站写文章,千元大奖等你来拿!“一起来O站,玩转AGI!”在前端处理XML配置文件时,可以使用JavaScript的内置功能来解析、操作和修改XML数据。处理XML的几个关键步骤1.加载XML文件......
  • 第3篇 :git 首次创建项目上传,代码合并操作
    一.首次创建远程代码库,并上传自己修改的本地代码第1步:在自己电脑创建本地项目路径,在这个路径下执行初始化git:命令:gitinit第2步:改分支名称【如果远程仓库,主干的名称是main,而不是master,需要在本地将master改为main,如果主干已经是main则可忽略此步骤,这种情况只出现在gitlab代码......
  • 项目打包后build文件夹自动打成压缩包
    问题经常要项目打包成build文件夹后,手动压缩下,修改压缩包名称(比如添加日期项目名称等信息)发给相关人员发版那么我们为什么不配置下,直接打包后自动生成压缩包呢,代码如下:解决package.json文件添加以下命令,重点是添加'&&node./zipBuild.js'即可"proBuildZip":"webpack--c......
  • 大模型备案全网最详细流程解读(附附件+重点解读)
    文章目录一、语料安全评估二、黑盒测试三、模型安全措施评估四、性能评估五、性能评估六、安全性评估七、可解释性评估八、法律和合规性评估九、应急管理措施十、材料准备十一、【线下流程】大模型备案线下详细步骤说明十二、【线上流程】算法备案填报流程及重难......
  • 大模型备案流程最详细说明【评估测试题+附件】
    2024年3月1日,我国通过了《生成式人工智能服务安全基本要求》(以下简称《AIGC安全要求》),这是目前我国第一部有关AIGC服务安全性方面的技术性指导文件,对语料安全、模型安全、安全措施、词库/题库要求、安全评估等方面提出了具体规范和要求。(一)适用主体《AIGC安全要求》的适用主......