栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

若依实现文件多线程批量上传案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

若依实现文件多线程批量上传案例

 利用多线程处理批量上传文件,能够加快任务处理耗时。

package com.ruoyi.print_system.controller;

import com.ruoyi.common.core.controller.baseController;
import com.ruoyi.common.core.domain.AjaxResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.*;
import java.util.concurrent.*;

@RestController
@RequestMapping("/print_system/")
public class UploadController extends baseController {

    
    @PostMapping(value = "/upload/batch/photo")
    public AjaxResult batchUploadFile(MultipartFile[] file) {
        AjaxResult ajaxResult = new AjaxResult();
        Map data = new HashMap<>(2);
        //文件个数
        int size = file.length;
        //每个文件id集合
        List fileIds = new ArrayList<>();
        //根据文件的长度设置线程池
        ExecutorService executorService = Executors.newFixedThreadPool(size);
        //每一个任务的list
        List> taskList = new ArrayList<>();
        try {
            for (int i = 0; i < size; i++) {
                //把每一个文件放入异步任务中 去执行
                FutureTask task = new FutureTask<>(new SumJob(file[i]));
                executorService.execute(task);
                //把每一个任务的返回信息放进入
                taskList.add(task);
            }
            for (FutureTask item : taskList) {
                try {
                    //把每一个id放入集合中
                    fileIds.add(item.get());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            ajaxResult.setCode(999);
            ajaxResult.setMsg("上传失败");
            ajaxResult.setData(String.valueOf(e));
            return ajaxResult;
        }
        //返回消息体
        ajaxResult.setCode(200);
        ajaxResult.setMsg("上传成功");
        data.put("success", fileIds.size());
        data.put("fail", file.length - fileIds.size());
        ajaxResult.setData(data);
        return ajaxResult;
    }


}


class SumJob implements Callable {

    private final Logger logger = LoggerFactory.getLogger(SumJob.class);
    private MultipartFile file = null;

    public SumJob(MultipartFile file) {
        super();
        this.file = file;
    }

    @Override
    public String call() throws Exception {
        //创建文件在服务器端存放路径
        final String dir = "/home/photo";
        File fileDir = new File(dir);
        //如果目录不存在,创建目录
        if (!fileDir.exists()) {
            fileDir.mkdirs();
            logger.info(dir + "目录创建成功");
        }
        String oldFileName = file.getOriginalFilename();
        String suffix = oldFileName.substring(oldFileName.lastIndexOf("."));
        //对文件名进行统一处理
        String newFileName = oldFileName.substring(0, 18) + suffix.toLowerCase();
        String filePath = fileDir + File.separator + newFileName;
        File files = new File(filePath);
        //文件保存到目录中
        file.transferTo(files);
        //返回上传路径
        return filePath;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659065.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号