首页 > 其他分享 >SpringMVC怎么实现web端上传超大文件

SpringMVC怎么实现web端上传超大文件

时间:2023-04-10 17:11:43浏览次数:52  
标签:文件夹 web 文件 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++源码下载

详细配置信息及思路

标签:文件夹,web,文件,SpringMVC,源码,file,上传,下载
From: https://www.cnblogs.com/songsu/p/17303556.html

相关文章

  • 前端怎么实现web端上传超大文件
    ​ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NET页面设计:TextBox和Button按钮。​编辑TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button实......
  • Webpack中手动实现Loader与Plugin
    Loaderloader是一个转换器,用于对源代码进行转换。工作流程webpack.config.js里配置了一个模块的Loader;2.遇到相应模块文件时,触发了该模块的loader;3.loader接受了一个表示该模块文件内容的source;4.loader使用webapck提供的一系列api对source进行转换,......
  • 解决WebService部署时出现的“未能创建类型...”错误
       这几天正在学习WebService,但是在部署时老是出现“未能创建类型...”的错误,在IIS7.0下折腾了半天,终于成功部署,现将经验向大家奉上。   首先必须先在IIS在创建一个虚拟目录(这个就不用多说了吧),如果这个时候直接在浏览器里调用WebService就会出现......
  • 第9章 使用MVC为移动和客户端应用程序创建Web API(ASP.NET Core in Action, 2nd Editio
    本章包括创建WebAPI控制器以向客户端返回JSON使用属性路由自定义URL使用内容协商生成响应使用[ApiController]属性应用通用约定在前五章中,您已经完成了服务器端渲染ASP.NETCore应用程序的每一层,使用RazorPages将HTML渲染到浏览器。在本章中,您将看到对ASP.NETCore应用程......
  • JavaScript怎么实现web端上传超大文件
    ​ PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploads=on/off 是否允许通过http方式上传文件2.max_execution_time=30 允许脚本最大执行时间,超过这个时间就会报错3.memory_limit=50M 设置脚本可以分配的最大内存量,防止失控脚本占用过多内存,此......
  • 基于SqlSugar的开发框架循序渐进介绍(26)-- 实现本地上传、FTP上传、阿里云OSS上传三者
    在前面介绍的随笔《基于SqlSugar的开发框架循序渐进介绍(7)--在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传》中介绍过在文件上传处理的过程中,整合了本地文件上传和基于FTP方式的上传文件的处理整合。本篇随笔继续介绍文件上传的处理,基于选项模式【Options】......
  • Web渗透测试流程
    1.信息收集阶段1.1确定目标确定目标:在信息收集阶段中,我们需要明确测试的目标,这包括确定要测试的网站、应用程序或系统以及测试的目的。我们需要收集有关目标的所有信息,例如目标的IP地址、URL、操作系统、Web服务器、应用程序和框架等。我们可以使用以下工具来收集信息:工......
  • ios的百度网盘web版本视频播放器的字幕插件功能
    详情见https://coding.net/u/qidizi/p/pan.baidu.com.srt.plugin/git这里放一张效果图。......
  • 监听 input type=file 文件上传取消事件
    在做项目的时候,需要根据是否上传图片,(前提是已经上传文件,再次上传取消时,监听取消事件)进而判断页面变化。通过查阅相关资料,发现change事件并不能监听取消,于是从另外一种角度:判断上传的文件是否有值,进而监听取消事件。代码如下:<inputtype="file"name="file"id="fileToUpload"a......
  • Abnormal build process termination--解决IDEA启动web项目报错
    在projectstructure中,把sdk中的jdk重新添加,却发现选择了正确的jdk目录却提示不是正确的jdk路径。于是,我重新安装了jdk。在idea中又重新引了jdk。这个问题就解决了。所以有时候当你一直运行正确的时候,突然发现有问题了。可能就是近期修改的东西导致的。基本就是jdk的问题  把......