Silverlight中用WCF实现文件快速上传(一、基本方法)

    在Silverlight中可能通过服务上传文件。通过服务上传文件可以比较方便地实现异步上传、分块上传、进度显示等等功能。因此,“Silverlight + 服务”组合可以实现比较强大类似于C/S模式中的那种上传功能。下面详细说明实现步骤。

    1. 创建Silverlight应用程序。

    这个是基本能力,不会的先找资料学习一下吧。

    假定创建的解决方案为:UploadFiles。默认情况下存在两个项目:UploadFiles和UploadFiles.Web。

    2. 添加WCF服务。

    在UploadFiles.Web项目中添加WCF服务:右键→添加→新建项→选“启用 Silverlight 功能的 WCF 服务”,如果VS是英文的则为“Silverlight-enabled WCF Service”。

    3. WCF服务的代码:

 

    4. Silverlight中的上传执行代码

    在MainPage.xaml中添加一个执行上传的按钮,后台执行代码如下:

 

    辅助类:

 

    5. 上传数据尺寸配置

    默认情况下,WCF只允许最大16KB的数据块上传。按此尺寸,实测上传速度很慢。如果要修改尺寸,则要修改Web.config文件。

    注意:是修改UploadFiles.Web中的Web.config,而不是UploadFiles中的ServiceReferences.ClientConfig。最开始我曾以为是修改后者,结果被困了好久,汗颜!

    网上有好多文章讲修改参数的,但无一指明是修改.Web项目中的Web.config,让我困惑了好久,最后在一个英文网页中找到的答案……。

    修改后的内容如下:

 

    修改的结果是允许最大2MB的数据块上传。Sunpire网友(参见参考文献2)提到的要增加24KB冗余的问题,我在实测中没有遇到。即:Sunpire网友的文章中提到<customBinding>要设置2MB+24KB,才能上传2MB数据的情况我没有遇到。我实际设置2MB就能上传2MB数据。当然,我没有象Sunpire网友那样去做那么多测试,只做了1MB和2MB的测试。

    6. 总结

    按照上述方法,可以实现各种文件快速上传。小文件上传几乎是瞬间的事,大文件也很快。

    缺点:上传时会一次性的把整个文件读入内存。进一步的解决方案是边读边上传。

 

参考文献:

[1]agile 的《Silverlight 3 中使用WCF上传文件 (简单进度条展示)》:http://my.oschina.net/agile/blog/2130

[2]Sunpire 的《Silverlight+WCF文件上传,含分段大小调节(WCF 16KB配置)、压缩Buffer调节、速度指示、批量等》:http://www.soaspx.com/dotnet/silverlight/silverlight_20100321_3357.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Silverlight文件上传 v4.2源码 程序介绍: 提供了几种上传模式,单文件,多文件,集成js文件的方式上传文件。 将Silverlight上传工具集成到网页文件中需要进行简单的配置,看 如下各项参数作用。 配置: MaxFileSizeKB: 文件大小 KBs. MaxUploads: 同时上传文件的最大数量 FileFilter: 文件类型过滤, 假如只使用jpeg文件: FileFilter=Jpeg (*.jpg) |*.jpg CustomParam: 自定义参数, 在WCF webservice可用 DefaultColor: 控件的默认颜色, 例如: LightBlue ChunkSize: 上传块中的每个字节的大小bytes (最小 4096, 默认是 4194304) (仅用于 HttpUploader) UploadHandlerName: 指定HttpUploadHandler名称, 例如: "PHPUpload.php" 用于处理php上传. Parameters: <asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/mpost.SilverlightMultiFileUpload.xap" MinimumVersion="2.0.30523" Width="415" Height="280" InitParameters ="MaxFileSizeKB=1000,MaxUploads=2,FileFilter=,CustomParam=1,DefaultColor=LightBlue" /> 事件: AllFilesFinished - 当所有文件完成上传时触发 (当上传过程中发生错误无效) SingleFileUploadFinished - 单文件上传完成时触发 ErrorOccurred - 当上传过程中有错误时触发 属性: TotalUploadedFiles: 所有上传文件数量 TotalFilesSelected: 列表中文件总数 Percentage: 总上传进度百分比 动作: 可以被JavaScript触发: StartUpload: 开始上传 ClearList: 清理列表 SelectFiles: 由于安全限制Silverlight 3中不可用。查看testpages中的示例。
Silverlight文件(大文件)上传项目源码 一个免费的SL多文件上传,支持大文件上传 Features(特色): - Select multiple files to upload (选择多文件上传) - Upload multiple files at the same time (asynchonous)(一次上传文件,异步刷新) - Cancel a single upload, or clear the full list(可以取消单个上传或清空上传列表) - Shows the overall progress(显示所有上传进度条) - Error notification when upload failed(上传错误会有提示) For developers / webmasters(对于开发者或者网管): - Configure file extension filter (for example, only .jpg files) (配置支持的格式,如仅仅支持jpg) - Configure maximum file size (设置最大上传尺寸) - Configure the number of simultaneous uploads (设置一次最多上传数量) - Input for custom parameters (输入自定义参数) - Basic webservice included - Change the default color by setting a single parameter(可以改变默认演示) - JavaScript events and properties for integration in your website Free Silverlight Multi File Uploader 配置参数说明: MaxFileSizeKB: File size in KBs.(最大上传尺寸,以KB为单位) MaxUploads: Maximum number of simultaneous uploads(一次上传最多的文件数) FileFilter: File filter, for example ony jpeg use: FileFilter=Jpeg (*.jpg) |*.jpg(上传文件格式) CustomParam: Your custom parameter, anything here will be available in the WCF webservice DefaultColor: The default color for the control, for example: LightBlue Possible parameters: <asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/mpost.SilverlightMultiFileUpload.xap" MinimumVersion="2.0.30523" Width="415" Height="280" InitParameters="MaxFileSizeKB=1000,MaxUploads=2,FileFilter=,CustomParam=1,DefaultColor=LightBlue" />

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值