首页 > 其他分享 >SpringMVC文件分片上传,断点续传

SpringMVC文件分片上传,断点续传

时间:2022-12-06 16:24:40浏览次数:50  
标签:断点续传 文件 SpringMVC 文件夹 file 分片 上传 源码 下载

 一、 功能性需求与非功能性需求

要求操作便利,一次选择多个文件和文件夹进行上传;
支持PC端全平台操作系统,Windows,Linux,Mac

支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。

支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端文件夹层级结构与本地相同。

支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验;

支持断点续传,关闭浏览器或刷新浏览器后仍然能够保留进度。

支持文件夹结构管理,支持新建文件夹,支持文件夹目录导航

交互友好,能够及时反馈上传的进度;

服务端的安全性,不因上传文件功能导致JVM内存溢出影响其他功能使用;

最大限度利用网络上行带宽,提高上传速度;

 

二、 设计分析

对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传

从上传的效率来看,利用多线程并发上传能够达到最大效率。

三、解决方案:

文件上传页面的前端可以选择使用一些比较好用的上传组件,例如百度的开源组件WebUploader,泽优软件的up6,这些组件基本能满足文件上传的一些日常所需功能,如异步上传文件,文件夹,拖拽式上传,黏贴上传,上传进度监控,文件缩略图,甚至是大文件断点续传,大文件秒传。 

 

1.1 在页面导入所需css,js

 <link rel="stylesheet" type="text/css"

       href="${pageContext.request.contextPath}/css/webuploader.css">

<script type="text/javascript"

       src="${pageContext.request.contextPath }/js/jquery-1.10.2.min.js"></script>

<script type="text/javascript"

       src="${pageContext.request.contextPath }/js/webuploader.js"></script>

1.2 编写上传页面标签

        <div id="uploader">

              <!-- 显示文件列表信息 -->

              <ul id="fileList"></ul>

              <!-- 选择文件区域 -->

              <div id="filePicker">点击选择文件</div>

       </div>

webupload代码

 <script type="text/javascript">

              //1.初始化WebUpload,以及配置全局的参数

              var uploader = WebUploader.create(

                     {

                     //flashk控件的地址

                     swf: "${pageContext.request.contextPath}/js/Uploader.swf",

                     //后台提交地址

                     server:"${pageContext.request.contextPath}/UploadServlet",

                     //选择文件控件的标签

                     pick:"#filePicker",

                     //自动上传文件

                     auto:true,

                     }

              );

             

              //2.选择文件后,文件信息队列展示

              // 注册fileQueued事件:当文件加入队列后触发

              // file: 代表当前选择的文件

              uploader.on("fileQueued",function(file){

                     //追加文件信息div

                     $("#fileList").append("<div id='"+file.id+"' class='fileInfo'><span>"+file.name+"</span><div class='state'>等待上传...</div><span class='text'></span></div>");

              });

                                  

      

              //3.注册上传进度监听

              //file: 正在上传的文件

              //percentage: 当前进度的比例。最大为1.例如:0.2

              uploader.on("uploadProgress",function(file,percentage){

                     var id = $("#"+file.id);

                     //更新状态信息

                     id.find("div.state").text("上传中...");

                     //更新上传百分比

                     id.find("span.text").text(Math.round(percentage*100)+"%");

              });

      

              //4.注册上传完毕监听

              //file:上传完毕的文件

              //response:后台回送的数据,以json格式返回

              uploader.on("uploadSuccess",function(file,response){

                     //更新状态信息

                     $("#"+file.id).find("div.state").text("上传完毕");

              });

后端接收上传数据采用FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下的文件上传功能。

 DiskFileItemFactory factory = new DiskFileItemFactory();

              ServletFileUpload sfu = new ServletFileUpload(factory);

        sfu.setHeaderEncoding("utf-8");

              try {

                     List<FileItem> items = sfu.parseRequest(request);

                     for(FileItem item:items){

                           

                            if(item.isFormField()){

                                   //普通信息

                            }else{

                                   //文件信息

                                   //判断只有文件才需要进行保存处理

                                   System.out.println("接收的文件名称:"+item.getName());

                                   //拷贝文件到后台的硬盘

                                   FileUtils.copyInputStreamToFile(item.getInputStream(), new File(serverPath+"/"+item.getName()));

                                   System.out.println("文件保存成功");

                            }

                     }

              } catch (FileUploadException e) {

                     e.printStackTrace();

              }

效果:

编辑

文件和文件夹批量上传

编辑

 

 

示例下载地址:

asp.net源码下载jsp-springboot源码下载jsp-eclipse源码下载jsp-myeclipse源码下载php源码下载csharp-winform源码下载vue-cli源码下载c++源码下载

详细配置信息及思路

标签:断点续传,文件,SpringMVC,文件夹,file,分片,上传,源码,下载
From: https://www.cnblogs.com/zyzzz/p/16955625.html

相关文章

  • 浏览器文件分片上传,断点续传
    ​PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploads=on/off 是否允许通过http方式上传文件2.max_execution_time=30 允许脚本最大执行时间......
  • 网页文件分片上传,断点续传
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag      ......
  • Web文件分片上传,断点续传
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用......
  • JavaScript文件分片上传,断点续传
    ​前言一、SpringMVC简介1.1、SpringMVC引言为了使Spring有可插入的MVC架构,SpringFrameWork在Spring基础上开发SpringMVC框架,从而在使用Spring进行WEB开发时可以......
  • js文件分片上传,断点续传
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好......
  • SpringMvc个人理解
    SpringMvc执行流程(1)浏览器提交请求到中央调度器(2)中央调度器直接将请求转给处理器映射器。(3)处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后返回......
  • springmvc注册fastJson报错
    原因:依赖版本问题这是我原本引入的依赖,版本是1.2.24<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId......
  • springMvc04(json数据传递参数)
    一、集合参数(JSON格式)1.1-导入"JSON"坐标(通用设置一次就可以)<!--springmvc需要的json相关坐标--><dependency><groupId>com.fasterxml.jackson.......
  • html5文件分片上传,断点续传
    ​ 1、介绍enctypeenctype 属性规定发送到服务器之前应该如何对表单数据进行编码。enctype作用是告知服务器请求正文的MIME类型(请求消息头content-type的作用一样)1、......
  • vue文件分片上传,断点续传
    ​ 1 背景用户本地有一份txt或者csv文件,无论是从业务数据库导出、还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工、挖掘和共创应用的时候,首先要将本地文......