spring boot 利用IOUtils.copy 上传图片

maven地址

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

1.代码实现controller

public ResponseEntity<Result<Object>> uploadImage(@RequestParam("fileName") MultipartFile file) throws IOException {
        this.eBaseSalestorepicsService.uploadImage(file);
        return new ResponseEntity<>(Result.ok(null), HttpStatus.OK);
    }

注:

@RequestParam("fileName")必须写

2.service

@Override
    public void uploadImage(MultipartFile file) throws IOException {
        // 要上传的目标文件存放路径
        String fileName = file.getOriginalFilename();
        String str ="D:/Files/Image/" + IdGen.uuid() + fileName.substring(fileName.lastIndexOf("."));
        File saveFile = new File(str);
        OutputStream outputStream = new FileOutputStream(saveFile);
        IOUtils.copy(file.getInputStream(),outputStream);
    }

亲测可用

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现分片上可以通过以下步骤: 1. 前端将文件切分成多个小块(chunk),并上到后端。 2. 后端接收到每个小块后,将其保存到本地临时文件夹中。 3. 当所有小块都上完成后,后端将所有小块合并成一个完整的文件,并删除临时文件夹中的文件。 下面是一个简单的 Spring Boot 实现分片上的代码示例: 1. 前端代码: ```javascript const CHUNK_SIZE = 1024 * 1024; // 每个小块的大小 const uploadChunks = async (file) => { const chunks = Math.ceil(file.size / CHUNK_SIZE); const promises = Array(chunks) .fill() .map((_, index) => { const chunk = file.slice(index * CHUNK_SIZE, (index + 1) * CHUNK_SIZE); const formData = new FormData(); formData.append("chunk", chunk); formData.append("filename", file.name); formData.append("index", index); return axios.post("/upload", formData); }); await Promise.all(promises); await axios.post("/merge", { filename: file.name }); }; ``` 2. 后端代码: ```java @Controller public class UploadController { private final String temporaryDirectory = "/tmp/upload/"; private final Map<String, List<File>> fileMap = new ConcurrentHashMap<>(); @PostMapping("/upload") public void uploadChunk(@RequestParam("chunk") MultipartFile chunk, @RequestParam("filename") String filename, @RequestParam("index") int index) throws IOException { File temporaryFile = new File(temporaryDirectory + filename + "_" + index); chunk.transferTo(temporaryFile); fileMap.computeIfAbsent(filename, k -> new ArrayList<>()).add(temporaryFile); } @PostMapping("/merge") public void mergeChunks(@RequestParam("filename") String filename) throws IOException { List<File> chunks = fileMap.remove(filename); File outputFile = new File(temporaryDirectory + filename); try (FileOutputStream outputStream = new FileOutputStream(outputFile)) { for (File chunk : chunks) { try (FileInputStream inputStream = new FileInputStream(chunk)) { IOUtils.copy(inputStream, outputStream); } chunk.delete(); } } } } ``` 以上代码实现了将一个大文件分成多个小块上到后端,然后合并成一个完整的文件。当然,还需要对上的文件进行校验、断点续等功能的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值