引用 楼主 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. java及jdbc与sql之间日期的转换

    javaSE中主要为日期字符串和日期对象之间的转换 JDBC中主要是util中Date与sql中作为数据库中Date的转换 public class DateDemo { public static ...

  2. 一起学Python:元组

    元组 Python的元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号. >>> aTuple = ('et',77,99.9)>>> ...

  3. 【codeforces 787A】The Monster

    [题目链接]:http://codeforces.com/contest/787/problem/A [题意] 把b一直加a->得到x 把d一直加c->得到y 然后问你x和y可不可能有相同 ...

  4. Python 标准库 —— uuid(生成唯一 ID)

    有时我们在百度贴吧,在一个网站,保存网页上的一些图片时,图片名有时会是一串很长的数字和字母组成的,但无一例外,图像之间不会出现重名.这个唯一的 id,一般通过 uuid 的方式获得,uuid 根据的是 ...

  5. win10 uwp 线程池

    原文:win10 uwp 线程池 如果大家有开发 WPF 或以前的程序,大概知道线程池不是 UWP 创造的,实际上在很多技术都用到线程池. 为什么需要线程池,他是什么?如何在 UWP 使用线程池,本文 ...

  6. 矿Java开发学习之旅------&gt;Java排序算法经典的二分法插入排序

    一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为採用折半比較,就可以得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比較 ...

  7. win7 64位系统下进入debug

    win7 64位无法直接通过命名行输入debug命令的方式进入到debug,好在我们可是使用一个工具DOSbox来进入debug.操作步骤如下:1.下载DOSbox进行安装.下载地址:点击打开链接.如 ...

  8. WPF 曲线图表控件(自制)(二)

    原文:WPF 曲线图表控件(自制)(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/775218 ...

  9. 如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置

    用Qt Creator 设计程序时,最方便的就是ui设计器,可以很容易的得到想要的布局. 但是这样自动布局带来的后果是很难知道窗口中某一部件在主窗口中的相对位置. 在处理子窗口鼠标事件时变的很麻烦.主 ...

  10. std::string 简单入门

    string的定义原型 typedef basic_string<char, char_traits<char>, allocator<char> > string ...