大文件分断上传后端

这篇具有很好参考价值的文章主要介绍了大文件分断上传后端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.构建类

public class MultipartFileParam {
  // 用户id
    private String uid;
    //任务ID
    private String id;
    //总分片数量
    private int chunks;
    //当前为第几块分片
    private int chunk;
    //当前分片大小
    private long size = 0L;
    //文件名
    private String name;
    //分片对象
    private MultipartFile file;
    // MD5
    private String md5;
}

2.分断上传方法,

传入文件大小由前端指定,这个方法只负责保存分片文件

	/**
	*保存分配图片
	**/
   public void uploadFile(MultipartFileParam param) {
         // 文件每次分片的下标
        int chunkIndex = param.getChunk();
        //将前端生成的md5创建成一个文件
           File file = new File(rootPath + File.separator + "dataFile" + File.separator + "temp" + File.separator + param.getMd5());
            if (!file.exists()) {
                file.mkdir();
            }
         //创建临时分片文件将 chunkIndex作为名称生成文件
            File chunkFile = new File(
                    rootPath + File.separator + "dataFile" + File.separator + "temp" + File.separator + param.getMd5() + File.separator + chunkIndex);
//将前端上传的数据保存到这个文件里面
FileUtils.copyInputStreamToFile(param.getFile().getInputStream(), chunkFile);
	}

3.合并方法

吧哪些分片文件合并成一个返回文件地址就行了
(还可以写一个检查的接口md5参数如果上传文件一样的话是一样的结果可以先判定一下直接返回)文章来源地址https://www.toymoban.com/news/detail-732831.html

    public String mergeFile(String fileMd5,String fileName) {
            // 读取目录里的所有的分片文件
            File dir = new File(rootPath + File.separator + "dataFile" + 	File.separator + "temp" + File.separator + fileMd5);
            File[] childs = dir.listFiles();
            if (Objects.isNull(childs) || childs.length == 0) {
                return null;
            }
 // 转成集合,便于排序
            List<File> fileList = new ArrayList<File>(Arrays.asList(childs));
            Collections.sort(fileList, new Comparator<File>() {
                @Override
                public int compare(File o1, File o2) {
                    if (Integer.parseInt(o1.getName()) < Integer.parseInt(o2.getName())) {
                        return -1;
                    }
                    return 1;
                }
            });
                // 创建合并后的文件地址
            File outputFile = new File(rootPath + File.separator + "dataFile" + File.separator + "merge" + File.separator + fileMd5 + File.separator + fileName);
              // 创建文件
            if (!outputFile.exists()) {
                File mergeMd5Dir = new File(rootPath + File.separator + "dataFile" + File.separator + "merge" + File.separator + fileMd5);
                if (!mergeMd5Dir.exists()) {
                    mergeMd5Dir.mkdirs();
                }
                logger.info("创建文件");
                outputFile.createNewFile();
            }
}

到了这里,关于大文件分断上传后端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [已解决]前端使用el-upload,后端使用文件上传阿里云报错:异常信息:java.lang.NullPointerException: null

    前端使用el-upload,后端使用文件上传阿里云报错: 报错原因:前端image参数未传进去 解决方法:在el-upload添加属性 name=\\\"image\\\" 文件传进去了!

    2024年01月20日
    浏览(60)
  • 图片上传流程&前端上传文件&后端保存文件&并返回图片地址

    也是在最近一点时间写小demo 遇到的一些问题 比如在用户界面,用户选择本地的一张照片,前端把照片传到后端,后端怎么把照片保存到服务器,然后返回给 图片线上地址。也是找了一些文章,然后分享下。  技术 前端:react 后端:egg.js(node框架) base64 转换  转二进制 保存

    2024年02月02日
    浏览(77)
  • 文件上传后端处理页面

    最近想搭建一个完整的网站,加深理解,困难重重啊,遇到很多问题 前端:非常原始的代码,没有用任何框架 后端:这里用php演示,Java的感觉有些复杂,个人用apache多一些,对tomcat和Java也不熟 学习新知识: 在php.ini中找到了关于文件上传的一些配置, 上传文件默认最大2

    2024年02月11日
    浏览(36)
  • 批量上传文件,以input上传文件,后端以List<MultipartFile>类型接收

    最近公司要求要做一个批量上传文件的功能,以往做的导入Excel表格、上传图片都是上传一个文件的,此次在开发的过程中着实让我犯了难,尤其是前后端对接的时候,这里做个记录。 后端接口是这样的,跟单个文件上传相比就是将MultipartFile类型的数据变成了集合,这个Mu

    2024年02月07日
    浏览(39)
  • BsinCopilot:Java版端到端大语言模型开发框架

    BsinCopilot是基于BsinPaaS开源框架构建的大语言模型应用SaaS服务,借鉴langchain的框架思想,引入  langchian4j组件,微前端微服务的架构设计,可快速助您构建和体验端到端的AI应用。 概念 说明 Bsin 毕昇缩写,毕昇,中国北宋发明家,活字印刷术的发明者。毕昇出身平民,长期在

    2024年03月13日
    浏览(61)
  • 前端上传文件夹或文件至后端(SpringBoot)

    前端上传文件夹使用的是 input 标签的file属性,最重要的是 webkitdirectory 这个属性,有了这个属性之后input才可以选择文件夹,但也只能选择文件夹了。 在webkitdirectory的官方文档里有对该属性的说明。 我们可以在这基础上做延伸,做一个表单来上传文件夹: form要加上 enctype=“

    2024年02月05日
    浏览(58)
  • [后端基础] 文件上传的发展史

    【本文首发于微信公众号: [程序员三木]】 欢迎关注我们的微信公众号,获取更多有关Java和Spring的技术文章和教程。 在ajax请求出来之前,人们都是直接通过form表单提交文件,或者form配合iframe(已废弃)进行文件上传,form配合input进行文件选择。 那么为了了解清楚他们的工

    2024年02月01日
    浏览(37)
  • Vue+elementUI中的el-upload实现上传文件给后端,限制上传文件的格式、文件的大小、文件的数量,将表单和Excel文件一起提交给后端

    需求:1.表单输入信息 2.上传Excel附件 3.下载附件模板 4.限制上传文件的格式、文件的大小、文件的数量 5.将表单和Excel文件一起提交给后端 效果图: 样式部分 data部分代码 method中的代码

    2024年02月12日
    浏览(60)
  • SpringBoot后端接收Axios上传的文件

    很多时候,我们项目开发的过程中,难免会遇到文件上传的需求 对于 SpringBoot 项目,我们该如何编写一个文件上传的接口呢? 这里我用的是 阿里云OSS 云服务器来作为上传文件的存储仓库,比起存储在电脑本地,云服务器更加便于管理、性能更好并且更加 安全 ,值得我们选

    2024年02月22日
    浏览(47)
  • 【文件上传系列】No.2 秒传(原生前端 + Node 后端)

    【文件上传系列】No.1 大文件分片、进度图展示(原生前端 + Node 后端 Koa) 整理的思路是:根据文件的二进制内容生成 Hash 值,然后去服务器里找,如果找到了,说明已经上传过了,所以又叫做秒传(笑) 接着上一章的内容,因为前端和后端的服务都写在一起了,显得有点凌

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包