• web一次下载多个附件


    摘要

    我们的系统有附件功能,在下载附件时,有时会下载多个附件,系统采用了把多个附件一起打包成zip文件下载的方式,这样下载过来是个压缩包,客户最近提出,他们不会解压缩这个压缩包,或者客户机器上根本就没有安装压缩软件,客户感觉使用起来很不方便(没办法,这种需求也真够空前的),好吧,谁让上帝开口了呢,一个字“做”。

    思路

    思路1:每次点击下载的时候启动多个<a>标签,这样比较简单,缺点是,没下载一个文件需要点一次保存。如果有10个以上,客户就晕菜了。
    思路2:在1个http请求里面下载多个文件,想用http长连接的形式(comet框架)请教了一些朋友,放弃了。或许也能够做成,有时间再看看。
    思路3:用flex/flash来下载文件,并保存在客户端(对这块不熟悉,放弃了)
    思路4:使用silverlight来下载文件,先把zip压缩包下载过来,再解压。(做下来了,但比较坎坷,对客户端设置要求严格)
     

    过程

    首先是下载zip文件到客户端,这个比较简单,采用万能的WebClient就可以搞定
     
    WebClient webClient = new WebClient();
    webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
    webClient.OpenReadAsync(new Uri(uri));
    这样就可以下载zip到客户端,只不过是文件流而已。
     
    接下来是要解压zip里面的文件,由于目前silverlight里面已经可以访问压缩文件里的资源了,就地取材,如下:
     
    Uri uri = new Uri(fileName, UriKind.Relative);
    StreamResourceInfo zipPackageSri = new StreamResourceInfo(zipStream, null);
    StreamResourceInfo textSri = Application.GetResourceStream(zipPackageSri, uri);
     
    文件取到了,开始写文件到本地磁盘,但是现在发现,没有办法让客户选择本地文件夹,(有个工程是FolderDialogSL4的,可以选择本地文件夹,但要求能够脱离浏览器运行,故没有采用)一时没有好的解决方法,就采用了只有IE才可以的特性,使用JS来浏览本地文件夹,但是要求安全选项如下:
     ///     选择文件夹
     ///     特别注意的是,由于安全方面的问题,你还需要如下设置才能使本JS代码正确运行,否者会出现"没有权限"的问题.
     ///     1.设置可信任站点(例如本地的可以为:http://localhost) 
     ///     2.其次:可信任站点安全级别自定义设置中:设置下面的选项"对没有标记为安全的ActiveX控件进行初始化和脚本运行"----"启用" 
     
    好了,可以选择本地文件夹了,该保存文件了,要保存本地文件也需要设置silverlight工程选项的-在浏览器内运行时需要提升的信任,如下图:
     
    要注意了,勾选这个是要付出代价的,代价如下(要么改注册表,要么做证书签名):
                    
                操作本地磁盘是需要silverlight可以在浏览器内完全受信任运行特性的
                部署时,需要修改客户端注册表或者设置xap文件的域管理员证书,详情请看下面链接
                http://www.pitorque.de/MisterGoodcat/post/Silverlight-5-Tidbits-Trusted-applications.aspx
                注册表项如下:
                Key path for 32-bit computers: HKEY_LOCAL_MACHINE\Software\Microsoft\Silverlight\
                Key path for 64-bit computers: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Silverlight\
                Value name: AllowElevatedTrustAppsInBrowser
                Value type: DWORD
                Valid Values:
                Disabled - 0x00000000
                Enabled - 0x00000001
       
    付出代价情况下,是完成了!
    幸好的是我们的系统是有个浏览器外壳的,专门做activex控件的注册与修复工作,还有设置IE安全选项的,每个客户端都会安装,所以也就没有问题。
     




  • 相关阅读:
    requests
    Py西游攻关之Socket网络编程
    编码的真相
    where查询条件的字段顺序打乱会影响命中索引吗?
    mysql联合索引怎样才会命中
    mysql执行计划解释
    mysql模糊查询(%)或范围查询怎样会影响命中索引
    完全符合能量守恒,胡克定理的JavaScript弹簧振子(超简洁版,超越第一版!)
    高仿真可控弹簧振子JavaScript编写
    JavaScript 3D, Cube,3D 立方体
  • 原文地址:https://www.cnblogs.com/HeroBeast/p/2844278.html
Copyright © 2020-2023  润新知