Ruoyi实现文件上传(MultipartFile)

本文介绍了在若依框架中如何使用FileUploadUtils工具类进行文件上传,包括处理文件上传逻辑和获取文件名、路径的方法,以提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.若依框架提供了FileUploadUtils工具类,用于处理文件上传,轻松实现文件的本地上传。

import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.file.FileUploadUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
public class FileUploadController {

    @PostMapping("/upload")
    public Result<?> handleFileUpload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return Result.error("文件为空");
        }
        try {
            // 使用FileUploadUtils工具类保存文件
            String filePath = FileUploadUtils.upload("C:\\uploads", file);
            return Result.ok("文件上传成功,保存路径:" + filePath);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("文件上传失败: " + e.getMessage());
        }
    }
}

该方法接受文件保存的目录和上传的文件作为参数,并返回文件保存的路径。

通过使用FileUploadUtils工具类,我们可以更加简洁地处理文件上传,并且可以利用其提供的一些便捷功能,如生成文件名、处理文件路径等。

2.获取文件名和文件路径

  // 生成文件名
String fileName = FileUploadUtils.getName(file.getOriginalFilename());
  // 处理文件路径
String filePath = FileUploadUtils.extractFilename(fileName, "C:\\uploads", file);

### Ruoyi框架中的文件上传实现方式 #### 背景介绍 Ruoyi 是一款基于 Spring Boot 和 Vue 的开源前后端分离快速开发平台,其提供了丰富的功能模块支持,其中包括文件上传的功能。通过前端和后端的协同工作,可以轻松完成文件上传的需求。 --- #### 前端部分:Vue 实现文件上传Ruoyi 框架中,前端通常采用 `vue-simple-uploader` 插件来处理文件上传逻辑[^2]。以下是具体实现方法: 1. **安装插件** 需要在项目中引入并配置 `vue-simple-uploader` 插件。 ```javascript // main.js 中全局注册插件 import uploader from 'vue-simple-uploader'; Vue.use(uploader); ``` 2. **页面代码编写** 页面上可以通过 `<upload>` 组件绑定事件监听器,从而触发文件上传操作。 ```html <!-- 文件上传组件 --> <upload :headers="{'Authorization': token}" :before-upload="handleBeforeUpload" @success="handleSuccess"> </upload> ``` 3. **自定义函数** 定义一些辅助函数用于控制上传行为。 ```javascript export default { data() { return { token: '', // 用户认证 Token }; }, methods: { handleBeforeUpload(file) { console.log('准备上传:', file.name); // 打印日志 return true; // 返回 false 可阻止上传 }, handleSuccess(response, file, fileList) { console.log('上传成功:', response); // 处理返回数据 } } }; ``` 上述代码展示了如何利用 `vue-simple-uploader` 来构建一个简单的文件上传界面,并且能够动态设置请求头(如携带用户身份验证信息)。 --- #### 后端部分:Spring Boot 接收文件 后端主要依赖于 Spring Boot 提供的 Multipart 支持接收文件流。以下是一个典型的控制器示例: ```java import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/common/upload") public class FileUploadController { @PostMapping("/file") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { if (file.isEmpty()) { return "失败:未检测到任何文件"; } try { byte[] bytes = file.getBytes(); Path path = Paths.get(UPLOAD_DIR + file.getOriginalFilename()); Files.write(path, bytes); return "成功:" + file.getOriginalFilename(); // 返回上传状态 } catch (Exception e) { return "错误:" + e.getMessage(); } } } ``` 此段代码实现了基本的文件保存流程,包括读取二进制数据并将之写入服务器指定目录下[^3]。 --- #### 请求方式对比 根据实际需求可以选择不同的 HTTP 请求工具发送文件至服务端。以下是几种常见技术栈及其特点比较表: | 工具名称 | 是否原生支持跨域 | 数据格式 | |----------|-------------------|-----------| | Ajax | 不完全支持 | JSON 或 FormData | | Axios | 支持 | JSON 或 FormData | | Fetch API| 支持 | Blob/ArrayBuffer | 对于大型文件传输场景推荐优先考虑使用 `FormData` 类型配合多线程分片机制优化性能表现。 --- #### 下载功能补充说明 除了上传外,在某些情况下还需要提供给用户下载已存储资源的能力。此时可通过如下 JavaScript 函数调用接口获取目标文档链接地址[^1]: ```javascript function downloadFile(value){ window.location.href = ctx + "common/download/resource?resource=" + value; } ``` 这里的关键在于拼接正确的 URL 参数路径指向后台对应的处理器映射规则。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值