Restful实现多文件上传

简介: Restful实现多文件上传

1 实例代码

以下代码都是经过测试可直接使用

    @ApiOperation(value = "上传多文件", notes = "上传多文件")
    @ApiResponses({
            @ApiResponse(code = 503, message = "服务不可用"),
            @ApiResponse(code = 404, message = "请求不存在"),
            @ApiResponse(code = 200, message = "服务器成功返回"),
            @ApiResponse(code = 501, message = "暂时没有实现"),
            @ApiResponse(code = 400, message = "请求参数没填写好")})
    @RequestMapping(value = "/uploadPictures", method = RequestMethod.POST)
    public ResponseEntity<JSONArray> uploadPictures(List<MultipartFile> files) {
        return new ResponseEntity<>(fileInfoService.uploadFiles(files), HttpStatus.OK);
    }
    @Override
    public JSONArray uploadFiles(List<MultipartFile> file) throws ApiException {
        JSONArray jsonArray=new JSONArray();
        for (MultipartFile multipartFile : file) {
            FileInfo fileInfo = this.uploadFile(multipartFile);
            jsonArray.add(fileInfo.getId().toString());
        }
        return jsonArray;
    }
   @Override
    public FileInfo uploadFile(MultipartFile multipartFile) throws ApiException {
        Date date=new Date();
        long time = date.getTime();
        FileInfo fileInfo = new FileInfo();
        byte[] bytes = new byte[0];
        try {
            bytes = multipartFile.getBytes();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String suffix  = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf(".") + 1);
        String filePath = System.getProperty("user.home") + File.separator+"lcls"+File.separator+"fileInfo"+File.separator +time+"."+suffix;
        FileWriter fileWriter = new FileWriter(filePath);
        fileWriter.write(bytes, 0, bytes.length);
        fileInfo.setFileRealName(multipartFile.getOriginalFilename());
        fileInfo.setFileSysName(time+"."+suffix);
        fileInfo.setFileType(multipartFile.getContentType());
        fileInfo.setExtensions(suffix);
        fileInfo.setFileSize((long) bytes.length);
        fileInfo.setPath(filePath);
        this.save(fileInfo);
        return fileInfo;
    }

2 遇到的坑

做到文件上传,单文件上传时一切正常,多文件时files参数一直为null,代码如下:

d04c9185ed944601a28f9a5fd0b98ff7.png

因为平时一直都使用swagger测试接口,之所以用swagger获取不到files,是因为swagger不支持在一个参数中上传文件数组,如果上传就会传递空值。踩坑踩了好久,但是在前端直接用form表单上传时可以的,建议测试多文件上传时用postman进行测试。

3 请求实例

目录
相关文章
|
存储 Java 文件存储
|
设计模式 算法 安全
一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)
一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)
1868 0
|
1月前
|
机器学习/深度学习 缓存 人工智能
MoE模型加速秘籍:vLLM混合KV缓存管理解析​
vLLM是高效分布式大模型推理引擎,采用分页注意力、连续批处理等技术实现高吞吐与低延迟。本文详解其架构设计与关键技术,包括KV缓存管理、调度机制、推测解码与分布式扩展等,助你深入理解性能优化原理。
209 1
|
4月前
|
安全 Serverless API
MCP Server 之旅第 5 站:服务鉴权体系解密
本文深入探讨了MCP协议在授权机制上的演进与函数计算对MCP场景下Auth的支持。文章从MCP协议的授权发展入手,分析了2024-11-05无授权支持到2025-03-26基于OAuth 2.1的授权机制,再到最新Draft中引入Protected Resource Metadata(RFC9728)的变化。同时,详细介绍了函数计算如何通过Bearer认证方式解决MCP场景下的授权问题,帮助开发者降低开发成本并提升安全性。
|
2月前
|
存储 人工智能 搜索推荐
AI智能体记忆机制深度解析:8种策略与实现思路
AI智能体的记忆能力是构建高质量对话与个性化服务的核心。本文解析8种常用记忆策略,包括全量记忆、滑动窗口、相关性过滤、摘要压缩、向量数据库、知识图谱、分层记忆及类OS内存管理,结合代码示例说明其原理与适用场景,助力开发者根据业务需求选择合适方案,实现高效、可扩展的AI系统。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
MCP、LLM与Agent:企业AI实施的新基建设计方案
MCP+LLM+Agent架构通过"大脑-神经网络-手脚"的协同机制,实现从数据贯通到自主执行的智能闭环。本文将深度解析该架构如何将产线排查效率提升5倍、让LLM专业术语识别准确率提升26%,并提供从技术选型到分层落地的实战指南,助力企业打造真正融入业务流的"数字员工"。通过协议标准化、动态规划与自愈执行的三重突破,推动AI从演示场景迈向核心业务深水区。
|
分布式计算 资源调度 监控
什么是 Spark DAG?
【8月更文挑战第14天】
1081 5
|
12月前
|
存储 缓存 Docker
docker中挂载数据卷到容器
【10月更文挑战第16天】
311 3
|
SQL 关系型数据库 MySQL
SQL中如何实现分页?
【8月更文挑战第3天】SQL中如何实现分页?
408 36
|
安全 NoSQL 前端开发
weblogic中间件漏洞总结(三)
weblogic中间件漏洞总结
789 102
weblogic中间件漏洞总结(三)