web一次下载多个附件

摘要:
摘要我们的系统有附件功能,在下载附件时,有时会下载多个附件,系统采用了把多个附件一起打包成zip文件下载的方式,这样下载过来是个压缩包,客户最近提出,他们不会解压缩这个压缩包,或者客户机器上根本就没有安装压缩软件,客户感觉使用起来很不方便,好吧,谁让上帝开口了呢,一个字“做”。源码下载通过为知笔记发布

摘要

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

思路

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

过程

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

免责声明:文章转载自《web一次下载多个附件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Qt编写地图综合应用12-路线查询DataGridView插入图片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]ubuntu下解压zip文件

1.功能作用:解压缩zip文件2.位置:/usr/bin/unzip3.格式用法:unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]4.主要参数    -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换    -p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不...

[Word] Word中保存出矢量图

word整个另存为html格式后,会出现一个xxxx.files文件夹,里面有.gif、.wmz、.xml、.emz等格式的文件。   1)通过.gif查看图片,查找你要保存的图片,假设名字为name.gif   2) 找到name.wmz文件,修改后缀.wmz为.zip,使用zip解压得到一个文件,该文件没有后缀,为其加入后缀.emf,此时得到你需要的矢...

Java对byte数组压缩 解压缩 (zip,gzip,bzip2,jzlib)

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.IOException;import java.util.zip.GZIPInputStream;import j...

通过调用支付宝查询对账单接口返回bill_download_url下载zip,解压缩

通过url下载zip对账单文件,进行解压。 读取压缩文件内容 import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStre...

ubuntu下文件压缩/解压缩命令总结

.gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName.tar.gz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName -------------------------------------...

Java—将文件压缩为zip文件

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; impor...