首页 > 编程语言 >PHP WEB项目文件夹上传下载解决方案

PHP WEB项目文件夹上传下载解决方案

时间:2023-03-14 14:14:35浏览次数:51  
标签:WEB 文件 上传下载 文件夹 file PHP 上传 源码 下载

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

要求操作便利,一次选择多个文件和文件夹进行上传;
支持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,文件,上传下载,文件夹,file,PHP,上传,源码,下载
From: https://www.cnblogs.com/songsu/p/17214703.html

相关文章

  • NAS通过Alist挂载公共云盘并用WebDAV本地加载的注意事项
    前言NAS采用Dock的方法,用Alist程序挂载阿里云盘后通过WebDAV加载使用,是一个很实用的需求,很好的实现了云端存储本地管理。关于NAS通过Alist挂载公共云盘,网上有很成熟的贴......
  • dirsearch web网站目录扫描工具详解
    文章目录​​1dirsearch介绍​​​​2安装​​​​3实战演练​​​​3.1仅指定网址-u​​​​3.2指定网站语言-e​​​​3.3指定字典-w​​​​3.4递归目录-r​......
  • Webpack底层原理及核心概念实际应用(一篇封神系列)
    Webpack是一个流行的打包工具,用于构建大型前端项目。它在前端社区中广泛使用,并且已成为前端开发中必不可少的工具之一。本篇文章将对Webpack的工作原理进行深入讲解并附带代......
  • Nginx:轻松搭建高性能Web服务的必备利器
    一、Nginx简介1.1Nginx的特点和优点高性能:Nginx采用了事件驱动、异步非阻塞的处理方式,可以处理大量并发连接请求,同时减少服务器资源的占用。它的吞吐量比传统的Web服务器高......
  • webgl 城市扫光
    需求:1.城市建筑物渐变2.中心光圈扩散3.水平面横扫直线4.抛物线聚合 先看效果     在上代码  /**@Author:marui*@Date:2023-03-0909:42:......
  • WebGIS|阿里云服务器配置Geoserver并发布服务
    前期准备购买阿里云的ECS服务器,创建实例,进入实例概述,查看这个实例的基本情况,这里我的实例的操作系统为系统为Ubuntu20.04。内存为4G,这里要注意的是公网IP,这时之后我们访......
  • WebGIS|OpenLayers加载Geoserver发布的图层数据
    OpenLayers加载WMS服务总的来说有两种方式:ol.layer.Image+ol.source.ImageWMS和ol.layer.Tile+ol.source+TileWMS这两种方式加载都需要设定bounds(bbox)和projection。openl......
  • 非侵入式入侵 —— Web缓存污染与请求走私
    作者:vivo互联网安全团队-GuiMingcheng本文介绍了两种攻击者无需直接接触服务端即可攻击和影响用户行为的安全漏洞——Web缓存污染与请求走私。Web缓存污染旨在通过......
  • Nullcon Berlin HackIM 2023 CTF - WEB,wp
    题目:reguest先来看下代码app.pyfromflaskimportFlask,Response,requestimportrequestsimportioapp=Flask(__name__)@app.route('/')defindex():......
  • NodeJS开发服务端实现文件上传下载和数据增删改查
    本文主要讲解已NodeJS作为服务器完成文件的上传下载和数据增删改查,前端框架为Vue3,UI框架为element-plus,Node版本为V16.14.2. 项目场景模拟是开发一个项目管理的系统,支持......