需求:

项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制。

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

支持所有浏览器。

支持文件批量上传

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

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

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

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

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

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

但无论插件再怎么灵活,也难以应付所有的需求,比如,你要上传一个2G的文件。以现在我们的网速,恐怕再快也得传半小时。要命的是,如果你在上传到90%的时候不小心关掉了浏览器,或者是手一抖摁了F5,完了,一切还得从头再来。这种用户体验简直太糟糕了。所以,断点续传就十分有必要了。什么是续传我就不解释了,用QQ传文件这么多年,大家都见过了。

每次上传文件片前先获取已上传的文件大小,确定本次应切割的位置

在参考了张鑫旭大哥的这篇文章后,我将学到的技术应用在了我的插件Huploadify中,成功的添加了断点续传功能。在此将技术和插件都分享给大家。

选择一个文件后,获取该文件在服务器上的大小,通过本地存储或自定义的函数来获取。

首先是文件的分割,HTML5新增了Blob数据类型,并且提供了一个可以分割数据的方法:slice(),其用法和字符串、数组的slice()方法一样,可以截取一个二进制文件的一部分。

关于如何将数据存在服务端,已经前端如何取数据,我在下面会讲到。

在服务端保存数据

文件上传了一部分,然后修改了文件内容,再次上传

仅仅上面四条,是不是情况就够复杂了?再加上你系统还有自己的业务逻辑,所以在服务端保存已上传文件数据是非常有必要的。而且保存数据和获取数据的函数都交给你来定义,抱着插件有足够的灵活性。

var data = {

lastModifiedDate : file.lastModifiedDate.getTime()

var url = 'http://localhost/uploadfile/';

url : url,

type : 'POST',

uploadedSize = returnData.uploadedSize;

return uploadedSize;

我向后台的某个地址发送一个请求,传递文件名和文件的最后修改时间为参数,后台根据这两个参数来找到与前台所选择的文件对应的服务器上的文件,将服务器返回的文件大小return出去,来被插件使用。为什么要传递这两个参数呢?我们在前台无法知道服务器上的这个文件的名称,所以使用原始文件名作为一个辅助标识。为了防止用户在两次上传间隔修改了文件,我们把文件的最后修改时间也传给服务端,让服务端进行比较,若时间不对应则返回已上传大小为0,重新上传此文件。

另外需注意的一点,就是在续传的第二步,不断提交文件片的过程中,也需要服务端准确定位到相应的文件,不能把A的数据追加到B上。采用的方式也是提交fileName和lastModifyDate两个参数(已写在插件内部,可服务端直接获取),服务端找到对应的文件进行追加。

从1.0到2.0,Huploadify又新加了很多东西,不过只是新加,使用方式跟之前的没有变化。例如上面的断点续传功能,你如果不想使用,只需设置breakPoints为false即可,插件仍按照以前的方式工作。除了断点续传这个大头,插件还做了如下改动:

完善了input file组件的accept属性支持,浏览时只显示运行的文件格式,就是这个东东:

详细内容可以参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/09/%e5%a4%a7%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/

项目太大 传不到服务器,上传大文件的解决方案相关推荐

  1. 向上传文件服务器,向服务器上传文件

    //--------------------向服务器上传文件------ //浏览选择需要上传的文件 private static bool Unzip(string address, string ...

  2. 服务器搭建微信编辑器,ueditor编辑器实现微信上传和图片服务器上传

    如题. 前端部分: var ue = UE.getEditor('container', { serverUrl:'{pigcms::$f_siteUrl}<?php  echo U(" ...

  3. 大文件上传到linux服务器,上传文件到服务器的Linux命令

    1 ssh 在Cygwin中执行:$ ssh username@remotehost 2 scp 命令scp基于SSH协议,可以将本地文件拷贝到远程服务上的指定目录,格式如下: $ scp filen ...

  4. 服务器怎么查看数据库文件,怎么查看服务器上的数据库文件

    怎么查看服务器上的数据库文件 内容精选 换一换 创建sink流将Flink作业数据通过OBS转储方式输出到数据仓库服务(DWS),即Flink作业数据先输出到OBS,然后再从OBS导入到DWS.如何导 ...

  5. fdfs往服务器上传文件超时,FastDFS 实现大文件分片上传

    1.引入fastdfs com.github.tobato fastdfs-client 1.25.2-RELEASE cn.hutool hutool-all 4.0.12 2.编写控制层Contr ...

  6. 华为云服务器 大文件,云服务器上传大文件

    云服务器上传大文件 内容精选 换一换 本节操作介绍本地MacOS系统主机通过安装"Microsoft Remote Desktop for Mac"工具向Windows云服务器传输 ...

  7. php项目源码发布linux,php代码上传到linux服务器无法正常显示

    近期接手了一个PHP开发的项目,一直想搞个LVS管理的工具,却一直没动力去做,这次就当是学习和为了以后工作的方便吧.开发过程中遇到这么一个问题,情况如下: 情况:在windows下写好的代码,上传在L ...

  8. 云端服务器上传本地项目

    云端服务器上传本地项目 本文章介绍如何将本地项目打包上传到云端服务器 1. 云端服务器 1.1 获得云端服务器 首先你需要有一个云端服务器-比如阿里云,腾讯云等,现在以阿里云为例,阿里云服务器购买地址 ...

  9. 文件上传控件-如何上传文件-大文件断点续传

    需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...

  10. vue实现大文件分片上传断点续传并展示上传进度条

    最近有一个上传视频到服务器的功能,然后发现视频太大了,比如1个G的视频文件基本都是上传失败的,我之前都是上传阿里云的,所以面对大文件上传服务器就做了分片上传和断点续传. 首先解释什么是分片上传:比如一 ...

最新文章

  1. 面试官:有了 for 循环 为什么还要 forEach ?
  2. 成为算法工程师的路上,掌握什么思维会让自我提升突飞猛进?
  3. html分页自动加载数据库,AngularJS实现分页显示数据库信息
  4. 【KDD 2020】推荐系统领域论文汇总
  5. 2020-12-13
  6. php 常见的算法题,php最常见最经典的算法题(1)
  7. Android菜鸟成长记4-button点击事件
  8. 将MongoDB与Morphia结合使用
  9. Double.valueOf()与Double.parseDouble()两者的区别
  10. 优秀员工和普通员工的十大区别,老板和员工都应该知道
  11. 什么软件画er图方便_ER模型怎么画?必备入门级模型图绘制软件
  12. 精品谷歌浏览器chrome插件大汇总!值得收藏
  13. 字幕的嵌入AVI转RMVB
  14. ssm酒店预订系统ssm酒店管理系统民宿预订ssm酒店客房预订系统SSM客房预订系统
  15. 英语3500词(一)university life主题(2022.1.13)
  16. dubbo官网最新版导航
  17. 【摘自csdn】一场我没有看懂的相亲
  18. 老板电器携手华为HarmonyOS创新升级中国厨房新理念
  19. EasyCVR出现只有HLS协议可播放,其他协议均无法播放是什么原因?
  20. 保罗兰德作品赏析_每周一书:保罗·兰德《设计的意义:保罗·兰德谈设计、形式与混沌》...

热门文章

  1. 转载:ASP.net页面跳转方式三种
  2. 对于长时间装载的ASP.NET页面如何在客户端浏览器中显示进度?
  3. 华为云怎么样_为什么阿里云要迁移到华为云?详细过程分析
  4. python 拍照搜题_大学慕课2020用Python玩转数据答案搜题公众号
  5. js基础知识汇总12
  6. 顺序堆栈实现数制转换以十进制数转化为八进制数为例
  7. java ilvmanagerview_创建一个多行的tooltip
  8. 把collections.Counter的计数结果转为pandas的DataFrame
  9. python实现strand_sort排序算法
  10. linux删除文件、文件夹操作