博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
阅读量:6476 次
发布时间:2019-06-23

本文共 3226 字,大约阅读时间需要 10 分钟。

 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编写。请点击  下载源码实例。

2011030414141548.jpg

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

你可能感兴趣的文章
Bootstrap技术: 模式对话框的使用
查看>>
小知识,用myeclipes找jar
查看>>
in-list expansion
查看>>
设计原则(四):接口隔离原则
查看>>
基于react的滑动图片验证码组件
查看>>
iOS快速清除全部的消息推送
查看>>
java单例模式深度解析
查看>>
【学习笔记】阿里云Centos7.4下配置Nginx
查看>>
VuePress手把手一小時快速踩坑
查看>>
dnsmasq安装使用和体验
查看>>
学习constructor和instanceof的区别
查看>>
Vijos P1881 闪烁的星星
查看>>
ABP理论学习之领域服务
查看>>
Qt 控制watchdog app hacking
查看>>
让所有IE支持HTML5的解决方案
查看>>
RDD之五:Key-Value型Transformation算子
查看>>
percona 5.7.11root初始密码设置
查看>>
Cognitive Security的异常检测技术
查看>>
Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映
查看>>
生活杂事--度过十一中秋
查看>>