引用 楼主 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秒左右。

http://bbs.csdn.net/topics/392010487

QQ邮箱打败163邮箱的过程(重视用户体验的结果)的更多相关文章

  1. dedecms织梦自定义表单发送到邮箱-用163邮箱发送邮件

    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_3_dg&wd=dedecms 邮箱&oq=d ...

  2. phpmailer使用qq邮箱、163邮箱成功发送邮件实例代码

    以前使用qq邮箱.163服务器发送邮件,帐号直接使用密码,现在不行了,得使用授权码,简单记录下 1.首先开通POP3/SMTP服务,qq邮箱——帐号——设置,找到POP3/SMTP点开启,输入短信会有 ...

  3. jeakins配置邮件通知,附带解决535报错:authentication failed,如果发现测试邮件可以发出,项目构成无法发出邮件,请开启SSL认证,端口号改为(465),qq邮箱、163邮箱通用

    535报错解决方案:调用163邮箱服务器来发送邮件,我们需要开启POP3/SMTP服务,这时163邮件会让我们设置客户端授权码,这个授权码替代上面代码部分的passwd即可成功发送邮件 如果设置的邮箱 ...

  4. python使用qq邮箱向163邮箱发送邮件、附件

    在生成html测试报告后 import smtplib,time from email.mime.text import MIMEText from email.mime.multipart impo ...

  5. 使用PHPMail发送邮箱(163邮箱为例)

    1.下载phpmail压缩包,并解压. 2.创建index.html文件.并写入代码. <form action="" method="post"> ...

  6. ios9邮箱添加163邮箱

    电脑登陆163邮箱➡️设置➡️开启pop3/smtp/imap功能➡️保存.开启后系统会给你个"客户端授权密码",同时会发短信到你手机里. 打开手机,设置➡️邮件,通讯录,日历➡️ ...

  7. python SMTP 发送邮件 阿里企业邮箱、163邮箱 及535错误

    class SendEmail(object): def __init__(self, type, to_addr): self.to_addr = to_addr self.sys_date = t ...

  8. python 自动打包,发送邮件(包括附件)至多个收件人(qq邮箱,163邮箱)

    -----------------------------打包部分---------------------------------- import zipfile def zipDir(dirpat ...

  9. python练习-使用163邮箱发送邮件

    具体代码如下> #密码等敏感信息已经用****替换 import smtplib,sys from email.mime.text import MIMEText from email.head ...

随机推荐

  1. 谷歌AI中国中心成立,人工智能势不可挡?

    昨日,谷歌在上海举办了一年一度的Google中国开发者大会.在本届大会上,谷歌云首席科学家李飞飞宣布了一个重磅消息,即在北京将成立谷歌AI中国中心.对于这个即将成立的AI中心谷歌寄予厚望,希望与中国本 ...

  2. [Clojure] A Room-Escape game, playing with telnet and pure-text commands - Part 3

    Code Path: https://github.com/bluesilence/Lisp/blob/master/clojure/projects/room-escape/src/room_esc ...

  3. 二叉堆(binary heap)—— 优先队列的实现

    二叉堆因为对应着一棵完全二叉树,因而可以通过线性数组的方式实现. 注意,数组第 0 个位置上的元素,作为根,还是第 1 个位置上的元素作为根? 本文给出的实现,以数组第 1 个位置上的元素作为根,则其 ...

  4. CocoaPods详解之(二)----进阶篇

    CocoaPods详解之----进阶篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/19178709 转载请注明出处 ...

  5. NOIP模拟 path - 按二进制位分组

    题目原文: 企鹅豆豆即将要去考长跑了,但是作为一只企鹅,长跑自然比不过鸵鸟和鸡.为了公平起见,教练告诉豆豆,他可以从 K 个指定地点中选择两个不同的地点分别作为起点和终点来考试.考试地图是一个由 N ...

  6. java命名规则(转)

    1. JAVA源文件的命名 JAVA源文件名必须和源文件中所定义的类的类名相同. 2. Package的命名 Package名的第一部分应是小写ASCII字符,并且是顶级域名之一,通常是com.edu ...

  7. shell脚本专题之-----------全自动编译安装mysql(免安装版)

    mysql的编译安装,在博客 开源服务专题之--------mysql的编译安装 中已经说明了,但是还是比较麻烦,尤其是一大堆命令,来手动执行,稍有不慎,就会出错.生产上一般都是先在本地测试环境进行自 ...

  8. Math对象重新整理

    注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法.这是它与Date,String对象的区别. Math对象的属性 --Math对象包含的属性大 ...

  9. 使用MVVM DataTemplate在WPF XAML视图之间切换

    原文 使用MVVM DataTemplate在WPF XAML视图之间切换 更新:这个技术的改进版本,一个不创建视图,可以在以下链接找到: http://www.technical-recipes.c ...

  10. ASP.NET Core 新建项目(Windows) - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 新建项目(Windows) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新建项目(Windows) 对于任何语言和框架,都 ...