首页 > 编程语言 >java springcloud 大文件分片上传处理

java springcloud 大文件分片上传处理

时间:2023-08-08 18:24:19浏览次数:59  
标签:文件 java springcloud 如下 编辑 源码 分片 上传 下载

 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。

先说下要求:

PC端全平台支持,要求支持Windows,Mac,Linux

支持所有浏览器。

支持文件批量上传

支持文件夹上传,且要求在服务端保留层级结构。文件夹数量要求支持到10W。

支持大文件断点续传,要求刷新浏览器,重启浏览器,重启电脑后仍然能够继续上传。文件大小要求能够支持到50个G。

支持自动加载本地文件,要求能够自动加载指定的本地文件。

支持文件批量下载,要求不要在服务器打包。因为50G的文件在服务器打包时间比较长。

支持文件夹下载,要求不要在服务器打包,下载到本地后要求保留层级结构

文件列表面板支持路径导航,新建文件夹

 

  对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,struts上传的功能就是基于这个实现的。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。

一、开发环境搭建

  创建一个FileUploadAndDownLoad项目,加入Apache的commons-fileupload文件上传组件的相关Jar包,如下图所示:

 

编辑

 

依赖jar包如下

 

编辑

 

二、实现文件上传

前台HTML模板

 

编辑

 

文件块处理逻辑如下

 

编辑

 

保存文件块逻辑如下

 

编辑

web.xml配置如下

 

编辑

 

运行效果如下:

 

编辑

 

文件面板逻辑

前台代码

 

编辑

2.3、文件上传的细节

  上述的代码虽然可以成功将文件上传到服务器上面的指定目录当中,但是文件上传功能有许多需要注意的小细节问题,以下列出的几点需要特别注意的

1、为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下。

  2、为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名。

  3、为防止一个目录下面出现太多文件,要使用hash算法打散存储。

  4、要限制上传文件的最大值。

  5、要限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法。

  针对上述提出的5点细节问题,我们来改进一下UploadHandleServlet,改进后的代码如下:

文件数据表结构

 

编辑

文件夹数据表结构

 

编辑

下载数据表结构

 

编辑

针对上述提出的5点小细节问题进行改进之后,我们的文件上传功能就算是做得比较完善了。

三、文件下载

加载文件列表,注意,这里只列出上传完的文件和文件夹,没有上传完的就不列出了

 

编辑

数据库的处理逻辑比较简单,注意一下SQL语句中的条件即可

 

编辑

  我们要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,编写一个ListFileServlet,用于列出Web应用系统中所有下载文件。

文件列表加载逻辑

 

编辑

       这里简单说一下ListFileServlet中listfile方法,listfile方法是用来列出目录下的所有文件的,listfile方法内部用到了递归,在实际开发当中,我们肯定会在数据库创建一张表,里面会存储上传的文件名以及文件的具体存放目录,我们通过查询表就可以知道文件的具体存放目录,是不需要用到递归操作的,这个例子是因为没有使用数据库存储上传的文件名和文件的具体存放位置,而上传文件的存放位置又使用了散列算法打散存放,所以需要用到递归,在递归时,将获取到的文件名存放到从外面传递到listfile方法里面的Map集合当中,这样就可以保证所有的文件都存放在同一个Map集合当中。

  编写一个用于处理文件下载的Servlet,DownLoadServlet的代码如下:

文件管理器主要逻辑如下:

文件管理器所有的逻辑都在PageFileMgr.java中实现。

 

编辑

另外,文件管理器有一些相关的配置在data目录下

 

编辑

系统配置数据如下

 

编辑

路径配置如下

 

编辑

文件管理器的脚本处理全部放在index.js中

 

编辑

关于JavaWeb中的文件上传和下载功能的内容就这么多。

​编辑

​编辑

​编辑

​编辑

 

视频演示:

windows控件安装,,linux-deb控件包安装,linux-rpm控件包安装,php7测试,php5测试,vue-cli-测试,asp.net-IIS测试,asp.net-阿里云(oss)测试,asp.net-华为云(obs)测试,jsp-springboot测试,ActiveX(x86)源码编译,ActiveX(x64)源码编译,Windows(npapi)源码编译,macOS源码编译,Linux(x86_64)源码编译,Linux(arm)源码编译,Linux(mips-uos)源码编译,Linux(mips-kylin-涉密环境)源码编译,sm4加密传输,压缩传输,

示例下载地址

源代码文档

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

详细配置信息及思路

标签:文件,java,springcloud,如下,编辑,源码,分片,上传,下载
From: https://www.cnblogs.com/songsu/p/17615093.html

相关文章

  • java动态代理
    动态代理代理比较好理解,和现实生活中意思一样。就是我要干一件事情,可以通过代理人或代理平台进行完成,不需要直接和服务方接触。又或者计算机网络上说的代理。为什么叫动态代理?这里回到java程序上,是因为在运行时可以动态的创建接口的实现,通过java的反射进行实现。依赖三个关键类......
  • SpringCloud
     1.微服务技术栈有哪些1.1微服务条目 1.2各大IT公司微服务架构阿里:Dubbo+HFS京东:JSF新浪:Motan当当:DubboX1.3各微服务框架对比  1.4网站架构图 1.5SpringCloudvsDubbo  1.6参考文档SpringCloudNetflix中文文档参考手册中文版Spring......
  • JavaGuide
    Java基础知识点汇总0.Java语言特性简单易学具有面向对象三大特性:继承、封装、多态平台无关性(由JVM虚拟机实现与平台无关)可靠性安全性支持多线程支持网络编程编译与解释并存与C++相比:都是面向对象的语言,都支持继承封装多态Java不提供指针来直接访问内存,更加安全Jav......
  • 学习Java第16天
    Scanner对象之前我们学的基本语法中文名并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。Java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入基本语法:Scanners=newScanner(System.in)通过Scanner类的ne......
  • JavaScript实现文件夹的上传和下载
    ​ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NET页面设计:TextBox和Button按钮。 ​编辑TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button......
  • 跳表及其Java实现
    跳表及其实现参考https://zhuanlan.zhihu.com/p/339750543importjava.util.Objects;importjava.util.Random;importjava.util.Stack;/***参考https://zhuanlan.zhihu.com/p/339750543*/publicclassSkipListPractice{staticclassSkipNode<T>{S......
  • Sqoop 连接mysql 错误 java.lang.NoClassDefFoundError(已解决)
    错误信息Exceptioninthread"main"java.lang.NoClassDefFoundError:org/apache/commons/lang/StringUtilsatorg.apache.sqoop.manager.MySQLManager.initOptionDefaults(MySQLManager.java:73)atorg.apache.sqoop.manager.SqlManager.<init......
  • java heap space解决方法
    在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的Heapsize不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError:Javaheapspace。所以产生这个异样的原因通常有两种:1.程序中出现了死循环2.程序占用内存太多,超过了JVM堆设置的最大值。对于第一种情况,需要自己查看......
  • asterisk-java的测试使用
    asterisk-java的测试使用一个可用于FreePBX的封装库asterisk-java用于asteriskPBX集成的免费Java库。https://github.com/asterisk-java/asterisk-java最新版本为3.39.0<dependency><groupId>org.asteriskjava</groupId><artifactId>asterisk-java</artifactId><......
  • Java入门题-查找一个字符串中,所有想查找短字符串的起始位置
    问题:就是长短两串字符串,从长字符串中查找所有短字符串在长字符串中的位置方法:用截取方式来规避已经查找过的内容,重复遍历来确定位置代码:需要引用importjava.util.Scanner; Scanners=newScanner(System.in);//新定义一个ScannerStringS=s.next();......