Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】-阿里云开发者社区

开发者社区> 橘子红了呐> 正文

Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】

简介:
+关注继续查看

 Silverlight不支持读写服务器端的硬盘,可是很多时候用户需要在Silverlight客户端往服务器端上传文件,那么本节将讲述Silverlight中最简单的上传文件的方式:在Silverlight客户端将文件序列化为Byte[]字符组,然后服务器端使用webService接收客户端的数据并且还原为文件即可。

        下面我们新建一个Silverlight应用程序解决方案SLUpload,然后在SLUpload.Web项目中鼠标右键点击此项目,添加一个web服务页面Upload。在此页面中写入下面代码:

复制代码

/// <summary>
/// 上传文件
/// </summary>
/// <param name="FileByte">文件的字节</param>
/// <param name="FileName">文件名</param>
/// <param name="FileExtention">文件扩展名</param>
/// <param name="SavePath">文件保存地址</param>
/// <returns></returns>
[WebMethod]
public string Uploadfile(byte[] FileByte,string FileName,string SavePath)
{
//文件的保存位置
string filepath = SavePath + FileName;
//判断在该位置是否有相同的文件。有的话则删除原来同名的文件
if (File.Exists(filepath))
{
//删除该位置的同名文件
File.Delete(filepath);
}
//根据传入的byte[]数据和文件位置创建一个FileStream实例
using (FileStream stream = new FileStream(filepath, FileMode.CreateNew))
{
//向文件中写入数据流
stream.Write(FileByte, 0, FileByte.Length);
};
return FileName;
}
复制代码

        这个Web服务方法的参数分别代表传输过来的文件内容字节组、文件名、文件保存路径。对于方法中使用的相关操作都在上面源码中有说明,我就不多说了。下面我们在SLUpload项目中鼠标右键点击项目名,然后“添加服务引用”,填入SLUpload.Web的upload.asmx页面的Url地址并且命名空间填写为UpLoadService点击确定,即在SLUpload项目中引用了webservice服务。下面我们看MainPage.xaml的代码如下:

复制代码

<Grid x:Name="LayoutRoot" Background="White">
<Button Content="上 传" Height="23" HorizontalAlignment="Left" Margin="20,36,0,0" Name="btnUpload" VerticalAlignment="Top" Width="75" Click="btnUpload_Click" />
<ListBox Height="183" HorizontalAlignment="Left" Margin="112,36,0,0" Name="listBox1" VerticalAlignment="Top" Width="232" />
<Button Content="清 空" Height="23" HorizontalAlignment="Left" Margin="20,88,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>
复制代码
        下面我们看MainPage.xaml.cs的关键代码,注意这里需要引用:using System.IO;using SLUpload.UpLoadService;这两个域名空间:
复制代码

private void btnUpload_Click(object sender, RoutedEventArgs e)
{
//设置一个选择文件的窗口的实例,并且设置为多选
OpenFileDialog dialog = new OpenFileDialog();
dialog.Multiselect
=true;
if (dialog.ShowDialog().Value)
{
//循环获取多选到的文件,然后将这些集合都通过调用webService上传
foreach (FileInfo file in dialog.Files)
{
//读取Stream
Stream stream = file.OpenRead();
stream.Position
= 0;
//设置字节数组初始化
byte[] buffer = new byte[stream.Length + 1];
//将文件写入字节数组中
stream.Read(buffer, 0, buffer.Length);
string fileName = file.Name;
//调用webService服务方法上传文件
UploadSoapClient upfile = new UploadSoapClient();
//设置缓冲区存取的字符、文件名称、文件保存路径,并且调用方法上传
upfile.UploadfileAsync(buffer, fileName, "C:\\");
upfile.UploadfileCompleted
+= new EventHandler<UploadfileCompletedEventArgs>(upfile_UploadfileCompleted);
}
}
else
{
MessageBox.Show(
"你没有选择文件,请重新选择文件!");
}
}
void upfile_UploadfileCompleted(object sender, UploadfileCompletedEventArgs e)
{
this.listBox1.Items.Add(e.Result + "文件上传成功!");
}

private void button1_Click(object sender, RoutedEventArgs e)
{
this.listBox1.Items.Clear();
}
复制代码

         这样一个最简单的Silverlight上传就做好了,但是在实际运行当中我们观察得出这种上传方式只能够上传小于2M的文件。那是因为ServiceReferences.ClientConfig文件的webService传输配置中设置的 maxBufferSize="2147483647" 。很显然,在实际中我们如果要传输大文件的话,就需要考虑将一个大文件切割成为数个小文件来进行传输。这是下一个话题。

         本实例采用VS2010+Silverlight 4.0编写。请点击 SLUpload.rar 下载源码实例。

2011030414141548.jpg



    本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/03/04/1970874.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【技术贴】​用程序调用福昕阅读器打开pdf文件|解决C:\Program files不是内部或外部命
【技术贴】调用福昕阅读器的命令行方式打开pdf文件|解决C:\Program files中间有空格 不是内部或外部命令。   一 首先是解决路径中含有空格的这个问题,你可以把它当做环境变量写进path里面,或者像我一样,在路径外面套上双引号,如图。
959 0
HTML5 FormData实现文件上传实例
原文:HTML5 FormData实现文件上传实例 表单提交,文件上传是一个常用又十分麻烦的功能,以前要上传文件通常都是借助插件或者flash来实现,噼里啪啦的加载一大堆东西。自从有了HTML5的FormData后,老板再也不用担心我的上传了。
1248 0
从零开始学习 webservice第一集,java webservice简单实例入门教程
现在从零开始学习webservice 概念自己百度搜,总之,webservice就相当于一个接口,就像你走进了一家售货店,你不需要知道这家店怎么卖给你东西,你拿着钱去,说我要一包玉溪,人家就会给你返回一包玉溪烟,这就是webservice。
1478 0
一起谈.NET技术,Xml日志记录文件最优方案(附源代码)
  Xml作为数据存储的一种方式,当数据非常大的时候,我们将碰到很多Xml处理的问题。通常,我们对Xml文件进行编辑的最直接的方式是将xml文件加载到XmlDocument,在内存中来对XmlDocument进行修改,然后再保存到磁盘中。
581 0
3404
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载