Silverlight文件上传下载实现方法(下载保存)

preview
需积分: 0 0 下载量 156 浏览量 更新于2020-09-03 收藏 71KB PDF 举报
在本文中,我们将深入探讨如何在Silverlight应用中实现文件的上传和下载功能,特别是针对下载保存的操作。Silverlight是一种由Microsoft开发的富互联网应用程序(RIA)平台,它允许开发者创建具有丰富图形和互动性的Web应用程序。 我们来看文件上传的实现。在Silverlight中,通常使用`System.Net.WebClient`类来处理文件上传。`WebClient`类提供了方便的方法如`UploadFile()`或`UploadData()`来发送POST请求到服务器。在上传文件之前,你需要确保用户选择了一个文件,这可以通过添加一个文件选择控件来实现。一旦用户选择了文件,你可以通过`WebClient`实例的`UploadFileAsync()`方法异步上传文件。例如: ```csharp private void btnUpLoad_Click(object sender, RoutedEventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == true) { fileinfo = new FileInfo(openFileDialog.FileName); var client = new WebClient(); client.UploadFileAsync(new Uri("http://yourserver/upload"), "POST", openFileDialog.FileName); // 添加事件处理程序来跟踪上传进度和完成情况 client.UploadProgressChanged += Upload_ProgressChanged; client.UploadFileCompleted += Upload_FileCompleted; } } ``` 在这个例子中,`Upload_ProgressChanged`和`Upload_FileCompleted`是两个事件处理程序,分别用于处理上传进度的更新和上传操作的完成。 接下来,我们讨论文件下载的实现。在Silverlight中,`WebClient`同样适用于下载任务。你可以使用`OpenReadAsync()`或`DownloadFileAsync()`方法来异步下载文件。以下是一个简单的下载保存示例: ```csharp private void btnDownload_Click(object sender, RoutedEventArgs e) { string url = "http://localhost:4528/download.ashx?fileName=aa.txt"; var client = new WebClient(); client.OpenReadCompleted += (s, args) => { using (var stream = args.Result) using (var fileStream = File.Create(fileinfo.FullName)) { stream.CopyTo(fileStream); } }; client.OpenReadAsync(new Uri(url)); } ``` 这段代码会触发一个异步的HTTP GET请求,然后在`OpenReadCompleted`事件处理程序中,将接收到的数据保存到本地文件系统。 注意,`WebClient`的一些关键属性和行为: 1. `IsBusy`属性表示当前是否正在进行网络操作。在请求完成之前,不能发起新的请求,否则会导致`NotSupportedException`。 2. `BaseAddress`属性用于设置基础URL,当提供相对URI时,它会被用来构建完整的URL。 3. `AllowReadStreamBuffering`属性默认为`true`,意味着数据会被缓存到客户端内存中。如果你担心内存使用,可以将其设为`false`以避免缓冲。 在UI设计方面,本文提到的`UC_UpDown.xaml`文件包含了按钮和图像控件,用于触发下载和显示下载进度。`HyperlinkButton`用于直接下载文件,而`Button`控件则用于启动自定义的下载保存流程。 为了提供更好的用户体验,通常还需要处理错误和进度更新,例如使用`DownloadProgressChanged`事件来更新进度条或文本,以及处理可能的异常。 总结来说,通过`WebClient`类和适当的事件处理程序,Silverlight应用能够轻松实现文件的上传和下载功能。不过,要记住Silverlight已经被弃用,现在推荐使用HTML5的`XMLHttpRequest`或`fetch` API等现代技术来处理文件操作。