网盘项目,如何实现下载整个文件夹?

rufengit 2016-08-28 07:12:58
目前负责一个项目,ASP.NET的,做一个网盘系统,别的都弄好了,只差一个下载文件夹的功能未实现,只能在服务器端打包成压缩文件,再发回浏览器。如何直接下载文件夹,不是压缩文件,谢谢大神!
...全文
924 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
下中南 2016-12-06
  • 打赏
  • 举报
回复
我也在搞各类似的项目,也是不知道怎么批量下载文件。。。有消息大家资源共享一下吧。顺便问一下,你批量上传是用的什么插件?
caehonao 2016-08-30
  • 打赏
  • 举报
回复
引用 17 楼 CKAOS 的回复:
那个控件好像是收费的。
是收费的啊,我们公司做的一个政府的项目就是采购的这个产品。现在已经上线了,项目运行稳定,客户也比较满意。
rufengit 2016-08-29
  • 打赏
  • 举报
回复
引用 14 楼 caehonao的回复:
[quote=引用 12 楼 CKAOS 的回复:] [quote=引用 10 楼 以专业开发人员为伍的回复:]有些软件,根本不是定位产品在“网页”这个层面上。如果你定位在网页,自然就会孤陋寡闻。 因为这根本不是什么传统网页应用,这是传统的桌面和手机应用!
不是我的项目,是朋友的,他说他老板认准了网页,还认准了文件夹下载,我朋友找我,我也是无语了![/quote]文件夹下载网上不是有一个吗?不仅支持文件夹下载还支持文件夹续传呢。 楼上的几位朋友提到C/S,手机端貌似把需求搞复杂了。就一个简单的网页下载文件夹功能不需要谈到Dropbox ,文件夹同步这些复杂的技术。 默认界面 下载文件夹 下载层级结构: 批量下载中 下载中... 下载完毕 示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Web文件下载控件演示页面</title> 
    <script type="text/javascript" src="js/json2.min.js"></script>
    <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" src="js/down.file.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/down.folder.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/down.js" charset="utf-8"></script></head>
<body>
<div id="downDiv"></div>
    <script type="text/javascript" language="javascript">
    var downer = new DownloaderMgr();

    $(document).ready(function ()
    {
    	    downer.loadTo("downDiv");

    	    //加载HttpUploader6上传的文件列表
    	    loadAllComplete();
    	});
	
	</script>
    <ul>
        <li><p><a target="_blank" href="../index.htm">打开上传页面</a></p></li>
        <li><p><a target="_blank" href="../db/clear.aspx">清空上传数据库</a></p></li>
        <li><p><a target="_blank" href="db/clear.aspx">清空下载数据库</a></p></li>
    </ul>  
</body>
</html>
[/quote] 这个是那个xpror.httpdownloader么?
caehonao 2016-08-29
  • 打赏
  • 举报
回复
引用 12 楼 CKAOS 的回复:
[quote=引用 10 楼 以专业开发人员为伍的回复:]有些软件,根本不是定位产品在“网页”这个层面上。如果你定位在网页,自然就会孤陋寡闻。 因为这根本不是什么传统网页应用,这是传统的桌面和手机应用!
不是我的项目,是朋友的,他说他老板认准了网页,还认准了文件夹下载,我朋友找我,我也是无语了![/quote]文件夹下载网上不是有一个吗?不仅支持文件夹下载还支持文件夹续传呢。 楼上的几位朋友提到C/S,手机端貌似把需求搞复杂了。就一个简单的网页下载文件夹功能不需要谈到Dropbox ,文件夹同步这些复杂的技术。 默认界面 下载文件夹 下载层级结构: 批量下载中 下载中... 下载完毕 示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Web文件下载控件演示页面</title> 
    <script type="text/javascript" src="js/json2.min.js"></script>
    <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" src="js/down.file.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/down.folder.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/down.js" charset="utf-8"></script></head>
<body>
<div id="downDiv"></div>
    <script type="text/javascript" language="javascript">
    var downer = new DownloaderMgr();

    $(document).ready(function ()
    {
    	    downer.loadTo("downDiv");

    	    //加载HttpUploader6上传的文件列表
    	    loadAllComplete();
    	});
	
	</script>
    <ul>
        <li><p><a target="_blank" href="../index.htm">打开上传页面</a></p></li>
        <li><p><a target="_blank" href="../db/clear.aspx">清空上传数据库</a></p></li>
        <li><p><a target="_blank" href="db/clear.aspx">清空下载数据库</a></p></li>
    </ul>  
</body>
</html>
吉普赛的歌 2016-08-29
  • 打赏
  • 举报
回复
引用 12 楼 CKAOS 的回复:
[quote=引用 10 楼 以专业开发人员为伍的回复:]有些软件,根本不是定位产品在“网页”这个层面上。如果你定位在网页,自然就会孤陋寡闻。 因为这根本不是什么传统网页应用,这是传统的桌面和手机应用!
不是我的项目,是朋友的,他说他老板认准了网页,还认准了文件夹下载,我朋友找我,我也是无语了![/quote] 其实很简单, 不要自己造轮子, 看百度云盘怎么做就好了。 百度云盘网页可以下载单个文件, 下载文件夹就得用c/s版的软件了。 不管什么方面,b/s有安全限制, 能做到也非常麻烦非常勉强。c/s就容易得多。 你朋友老板是既然是做IT行业的, 可以跟他解释清楚的了。
rufengit 2016-08-29
  • 打赏
  • 举报
回复
那个控件好像是收费的。
caehonao 2016-08-29
  • 打赏
  • 举报
回复
引用 15 楼 CKAOS 的回复:
[quote=引用 14 楼 caehonao的回复:][quote=引用 12 楼 CKAOS 的回复:] [quote=引用 10 楼 以专业开发人员为伍的回复:]有些软件,根本不是定位产品在“网页”这个层面上。如果你定位在网页,自然就会孤陋寡闻。 因为这根本不是什么传统网页应用,这是传统的桌面和手机应用!
不是我的项目,是朋友的,他说他老板认准了网页,还认准了文件夹下载,我朋友找我,我也是无语了![/quote]文件夹下载网上不是有一个吗?不仅支持文件夹下载还支持文件夹续传呢。 楼上的几位朋友提到C/S,手机端貌似把需求搞复杂了。就一个简单的网页下载文件夹功能不需要谈到Dropbox ,文件夹同步这些复杂的技术。 默认界面 下载文件夹 下载层级结构: 批量下载中 下载中... 下载完毕 示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Web文件下载控件演示页面</title> 
    <script type="text/javascript" src="js/json2.min.js"></script>
    <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" src="js/down.file.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/down.folder.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/down.js" charset="utf-8"></script></head>
<body>
<div id="downDiv"></div>
    <script type="text/javascript" language="javascript">
    var downer = new DownloaderMgr();

    $(document).ready(function ()
    {
    	    downer.loadTo("downDiv");

    	    //加载HttpUploader6上传的文件列表
    	    loadAllComplete();
    	});
	
	</script>
    <ul>
        <li><p><a target="_blank" href="../index.htm">打开上传页面</a></p></li>
        <li><p><a target="_blank" href="../db/clear.aspx">清空上传数据库</a></p></li>
        <li><p><a target="_blank" href="db/clear.aspx">清空下载数据库</a></p></li>
    </ul>  
</body>
</html>
[/quote] 这个是那个xpror.httpdownloader么?[/quote]对,都已经做好了。用起来很简单。控件链接 实际上问题没有你想的那么复杂,又是C/S,又是桌面端,又是百度网盘,居然来了个移动端的,这是把简单问题复杂化的节奏么。 其实需求很简单,就是下载文件夹,想办法下载就完了。搞开发的遇到问题是正常的,咱就想办法解决问题。至于宏观大道理咱们暂时先少谈。
bqiume 2016-08-28
  • 打赏
  • 举报
回复
引用 楼主 CKAOS 的回复:
目前负责一个项目,ASP.NET的,做一个网盘系统,别的都弄好了,只差一个下载文件夹的功能未实现,只能在服务器端打包成压缩文件,再发回浏览器。如何直接下载文件夹,不是压缩文件,谢谢大神!
因为这个需求比较特殊,所以真正的解决方案不是很多,目前为止大概有2种:一种是文件夹压缩下载,一种就是基于控件。 虽然这个需求比较特殊但是却是非常有意义,它的意义在于大幅度提升了用户体验,和当年QQ邮箱首推大文件上传功能的意义一样重大。在QQ邮箱之前没有任何一个邮箱和网盘有这个功能,虽然当时上传大文件的需求可能不多,但是却是存在的。只不过这个小需求不被一般的公司重视更不被广大开发人员重视。最终还是被腾迅抓住这个机会一举成为行业领先地位。 再回过头来看看早先的领导品牌163邮箱却眼睁睁的看着QQ邮箱的崛起。什么原因呢?当然是不够重视用户体验,当时而言163邮箱已经是行业老大,他不需要花这么大的力气的来满足小众需求,这点需求他根本看不上。但是对于QQ邮箱来说他需要去争取哪怕很小的一部分用户,只有这样他才有发展的机会。 我们再看看第二块市场:网盘。实际上在10年前网盘就有了,而且当时用户量还比较大,但是那么大的市场居然没有一家公司把用户体验这块做好,当时用户想传大点的文件那真是一个蛋疼,首先你要自已把文件用工具分成几块,然后一块一块的上传到网盘中。当时居然连批量上传的功能都还没有。但就是这么糟糕的用户体验仍然有大量的用户在使用,用现在的话来讲这真是刚需。 但是遗憾的是这些网盘服务商虽然抓住了这个机会但是没把握住,起了个大早,赶了个晚集,错,连晚集都没赶上,当年那些火爆的网盘现在你还能找到几家?现在一提到网盘大家想到的就是百度,360,115网盘,谁还记得10年前的网盘服务商?但你要说现在的这些网盘和10年前的那些网盘有什么重大的区别吗,好像也没有什么重大的创新出现。无非就是可以秒传文件,可以传大文件,可以断点续传。但是就这些用户体验的改进才让他们一步步成为行业老大。虽然这些功能是QQ邮箱先搞出来的,但是百度也会学啊。 如果你要说需求难度大,不好实现。现在有哪个需求很简单?简单的需求还轮得到你来做,CSDN上面几百万人开发者随便一个都能搞得定的问题还指望你吗? QQ邮箱当时做大附件上传功能难吗?当然很难,QQ邮箱那帮人也是做了5年才做稳定的。花了相当大的时间和精力来做。难道你就指望做个新闻管理系统,新闻的增删改查,像这样的功能你做的再多有什么用? 从网盘及QQ邮箱的发展史我们可以得出一个很重要的经验,就是要重视每一个需求,哪怕这是一个小众需求,但是说不定哪天他就可能会引领一个潮流。 扯了点题外话,现在回到正题。先说第一种解决方案,文件夹压缩,其实这个方案很令人纠结,不仅是开发人员实现的纠结,用户用起来也很纠结,但是没办法,谁让W3C委员会没定义一个文件夹的HTTP协议呢。所以你改变不了世界就学会适应吧,文件夹压缩就是在这种场景下面诞生的。当然也是解决了这个问题,虽然有点纠结,但是忍忍也就过去了。不然你想怎样?北京房价那么高了,全国人民都在抱怨,有用吗?房价降了吗?没有,所以光抱怨是没用的。 不过站在技术角度还是要说一点,这种方案之所以纠结就是它虽然可以实现但是很占服务器空间,小的文件夹还好说一点,要是文件夹比较大,那就相当占空间了,一个用户下载一次就要创建一个,用户多了,这个创建的临时文件就多了,创建的越多等待的时间就越长,最终会严重影响用户体验。 假如果一个文件夹里面全是G级别的文件,同时有几十个,那创建这么一个临时文件估计就要半天,然后再下载,这时间可就成指数级的增加了,下载过程中再来几次网络异常或者中断,那你基本上就可以成功把用户逼疯了。 基于控件的方案目前只有:Xproer.HttpDownloader 基于控件的方案也有一个缺点,就是需要每一个用户第一次使用时要安装一下控件,后面再使用时就不需要安装了。当然所有基于控件的解决方案都存在这个问题。但这个问题不大,因为控件小,安装时间也比较短大概3秒左右。
rufengit 2016-08-28
  • 打赏
  • 举报
回复
嗯,大神们真知灼见!
  • 打赏
  • 举报
回复
至今为止,我为新部署的机器(今年就新购买了许多机器)安装 windows 之后,分别安装了最新版 chrom 和 firefox,都是从其官网部署的,之后访问一个严重依赖 Flash 播放器的网页应用。 没有任何问题!这些浏览器都能很好地支持。大厂商不敢动那些目前很常用的大应用,只是逐步恐吓用户。 关键点在于,你自己开发的插件很容易被用户直接拒绝、卸载。因此这些东西不太能“走中间路线”。还不如专门发布客户端软件。
  • 打赏
  • 举报
回复
如过你要给用户一个方便的跨机器、跨地域同步功能,那么就不要定位为“网盘项目”。这个产品定位就是错误的。这是类似 DropBox、SVN 等的功能。这需要分别为windows桌面、手机等等平台分别写一个客户端,并且让用户下载安装一次(以后程序自动更新)。不要打网页的主意。
bl5t3z2x1 2016-08-28
  • 打赏
  • 举报
回复
引用 楼主 CKAOS 的回复:
目前负责一个项目,ASP.NET的,做一个网盘系统,别的都弄好了,只差一个下载文件夹的功能未实现,只能在服务器端打包成压缩文件,再发回浏览器。如何直接下载文件夹,不是压缩文件,谢谢大神!
这个需求普通的语言都是无解的,这些语言包括服务端的:ASP.NET,JSP,PHP,ASP,客户端的:JS,HTML5,JQuery,控件:Flash, Silverlight。 一般的下载都是浏览器请求服务器,然后解析标准HTTP协议,进行数据的分析和解析。但是HTTP协议里面没有关于文件夹的定义,所以浏览器也就搞不定了。基于这个原因,所有的基于浏览器本身的解决方案基本上都是不靠谱的,因为这个事情浏览器本身就干不了。所以还是需要开发人员自已来搞定,比如把文件夹压缩后让用户下载,文件夹小还好说,文件夹要是大的话,光压缩就要半天,压缩后还要下载,又是半天。对于用户来讲体验是相当的差。而且对与服务器来讲每次下载文件夹也会有负担,文件夹压缩需要创建一个新的文件,这个文件会占用服务器空间。下载的人数越多,占用的空间就越大。 这种在服务端对文件夹进行压缩的方法只能说是一种很无语的方法,因为设计HTTP协议的时候没下载文件夹这个需求嘛。计划赶不上变化。 先说HTML5,虽然他增加了许多的功能,但是没有增加文件夹下载这个功能。同时由于浏览器的安全权限设置也不允许HTML5往本地写数据。 ASP.NET,JSP,PHP,ASP这些服务端语言是在服务端运行的,跟客户端是两马事。 Silverlight也不用说了,原理和Flash类似,有水箱机制,浏览器不允许往本地写数据。 Flash由于Adobe设计了沙箱机制所以也不允许往本地这与数据,同时现在的浏览器也增强了对Flash的安全限制,在Chrome最新的版本中是开始逐渐屏蔽Flash的。就连Adobe公司自已都已经开始放弃Flash了。国际知名互联网公司现在对Flash的态度都是放弃的态度,2015年9月亚马逊宣布放弃Flash,2015年7月Twitch宣传放弃Flash,2015年7月Facebook宣传放弃Flash,2015年7月火狐开始屏蔽Flash,2015年6月Chrome禁用带有Flash的广告,2015年1月YouTube彻底放弃Flash,2015年宣传官网放弃Flash,2010年Google发布HTML5测试版本。 一张图告诉你Flash的缺点: HTML5和Flash对比:
  • 打赏
  • 举报
回复
浏览器不允许你去客户端去直接写什么文件(文件夹)。如果直接写文件,流浪软件就可以直接把木马程序放到几十亿电脑里边了,就可以直接覆盖用户的各种配置文件了。 浏览器的“下载”行为都是非常谨慎和一致的,要让用户多选择几部“确认”,尽可能地不下载。不是天马行空地去随便下载。
activexme 2016-08-28
  • 打赏
  • 举报
回复
引用 楼主 CKAOS 的回复:
目前负责一个项目,ASP.NET的,做一个网盘系统,别的都弄好了,只差一个下载文件夹的功能未实现,只能在服务器端打包成压缩文件,再发回浏览器。如何直接下载文件夹,不是压缩文件,谢谢大神!
这个需求可以用控件来做,因为需要控件对文件夹的数据进行解析和识别。
rufengit 2016-08-28
  • 打赏
  • 举报
回复
引用 10 楼 以专业开发人员为伍的回复:
有些软件,根本不是定位产品在“网页”这个层面上。如果你定位在网页,自然就会孤陋寡闻。 因为这根本不是什么传统网页应用,这是传统的桌面和手机应用!
不是我的项目,是朋友的,他说他老板认准了网页,还认准了文件夹下载,我朋友找我,我也是无语了!
  • 打赏
  • 举报
回复
至少在8、9年前,我们给企业做的 OA,就是可以同步文件夹的。企业办公室可以发布文件到服务器,然后全国各地的厂商、办公人员的电脑就“全自动地”同步了文件夹。当全国的代理商要上报信息时,它把文件放到自己的本地的机器的目录下,过一会儿(几分钟之后)就全自动地同步到企业业务部门的文件夹里边。 这就是一个很普通的桌面应用。 如果你纠结于网页什么什么,技术上至少落后了10几年,而且真正的互联网协议绝对不会等价于桌面、网页应用绝不会变成桌面应用。
  • 打赏
  • 举报
回复
有些软件,根本不是定位产品在“网页”这个层面上。如果你定位在网页,自然就会孤陋寡闻。 因为这根本不是什么传统网页应用,这是传统的桌面和手机应用!
  • 打赏
  • 举报
回复
这种文件夹同步功能功能的实现,满大街都有,至少10年前就有,国外很普遍,国内(像我们这样的程序员)也知道。只不过你不知道而已。不是什么“空白”。 Dropbox 前几年就融了几千万美金。而免费的并且跨 windows、安卓、苹果的类似文件同步软件也有很多。 如果你只知道“网页、网盘”,那么你的局限就太大了。怪不得不知道还有这种功能。
rufengit 2016-08-28
  • 打赏
  • 举报
回复
确实是难题!!!!!!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧