web服务中实现文件的上传(Pocket PC)
最近工作原因要用vs2003来开发Pocket PC方面的软件.
由于项目需要放弃了项目初期拟定的用asp.net移动WEB应用程序的开发方式,而改用智能设备应用程序来开发产品.
其实智能设备应用程序开发与桌面应用程序非常类似,也是一种win窗体开发.
该项目为了保持Pocket PC中的数据和远程服务器的数据保持一致,用到了web服务技术.
其中涉及一个图片上传功能的实现,就是把手机拍摄的图片及时发送到远程服务器.
让我们先建立一个WEB服务SmartDeviceMobileReportWebService
在其中定义一个方法UploadFile负责接收上传的图片,代码如下:
1 /// <summary>
2 /// 上传文件
3 /// </summary>
4 /// <param name="fs">文件的字节数组</param>
5 /// <param name="FileName">文件名称</param>
6 /// <param name="content">说明</param>
7 /// <returns>是否文件上载成功</returns>
8 [WebMethod(Description="提供文件上传的方法,返回文件是否上载成功")]
9 public bool UploadFile(byte[] b,string FileName)
10 {
11 try
12 {
13 //定义并实例化一个内存流,以存放提交上来的字节数组。
14 MemoryStream memoryStream = new MemoryStream(b);
15
16 //文件存放目录
17 string dir=@"d:\pic\";
18
19 //判断文件存放目录是否存在
20 if ( !Directory.Exists(dir) )
21 {
22 return false;
23 }
24
25 //定义实际文件对象,保存上载的文件。
26 string fileName = dir + FileName;
27
28 //创建文件流,要是上载的文件存在就覆盖
29 FileStream fileStream = new FileStream(fileName, FileMode.Create);
30
31 //把内内存里的数据写入文件流
32 memoryStream.WriteTo(fileStream);
33
34 //关闭流文件
35 memoryStream.Close();
36 fileStream.Close();
37
38 fileStream = null;
39 memoryStream = null;
40
41 return true;
42 }
43 catch( Exception ex )
44 {
45 string s=ex.Message;
46 return false;
47 }
48 }
2 /// 上传文件
3 /// </summary>
4 /// <param name="fs">文件的字节数组</param>
5 /// <param name="FileName">文件名称</param>
6 /// <param name="content">说明</param>
7 /// <returns>是否文件上载成功</returns>
8 [WebMethod(Description="提供文件上传的方法,返回文件是否上载成功")]
9 public bool UploadFile(byte[] b,string FileName)
10 {
11 try
12 {
13 //定义并实例化一个内存流,以存放提交上来的字节数组。
14 MemoryStream memoryStream = new MemoryStream(b);
15
16 //文件存放目录
17 string dir=@"d:\pic\";
18
19 //判断文件存放目录是否存在
20 if ( !Directory.Exists(dir) )
21 {
22 return false;
23 }
24
25 //定义实际文件对象,保存上载的文件。
26 string fileName = dir + FileName;
27
28 //创建文件流,要是上载的文件存在就覆盖
29 FileStream fileStream = new FileStream(fileName, FileMode.Create);
30
31 //把内内存里的数据写入文件流
32 memoryStream.WriteTo(fileStream);
33
34 //关闭流文件
35 memoryStream.Close();
36 fileStream.Close();
37
38 fileStream = null;
39 memoryStream = null;
40
41 return true;
42 }
43 catch( Exception ex )
44 {
45 string s=ex.Message;
46 return false;
47 }
48 }
再到我的Pocket PC客户端
先引用web服务http://10.10.10.191/SmartDeviceMobileReportWebService/ReportWebService.asmx并命名为ReportWebService
编写上传按钮事件
1//上传按钮事件
2 private void uploadbutton_Click(object sender, System.EventArgs e)
3 {
4 //要上传的文件
5 string fileFullName=this.fileMsglabel.Text;
6
7 if ( !File.Exists(fileFullName) )
8 {
9 MessageBox.Show("请选择图片");
10 return;
11 }
12
13 int i=fileFullName.LastIndexOf("\\");
14
15 Cursor.Current=Cursors.WaitCursor;
16
17 try
18 {
19 //调用WEB服务
20 ReportWebService.ReportWebService r=new ReportWebService.ReportWebService();
21
22 //要上传的文件名
23 string fileName=fileFullName.Substring(i+1);
24
25 //创建文件的实例
26 FileInfo f=new FileInfo(fileFullName);
27
28 //创建只读 FileStream
29 FileStream fileStream = f.OpenRead() ;
30
31 byte[] byteArray= new byte[f.Length];
32
33 //从流中读取字节并将该数据写入给定数组中
34 fileStream.Read(byteArray,0,Convert.ToInt32( f.Length ));
35
36 //开始调用web服务器上的公用方法
37 if ( !r.UploadFile(byteArray,fileName) )
38 {
39 MessageBox.Show("数据上传失败!");
40 }
41 else
42 {
43 MessageBox.Show("数据上传成功!");
44 }
45
46 //关闭流文件
47 fileStream.Close();
48 fileStream=null;
49
50 }
51 catch
52 {
53 MessageBox.Show("数据上传失败!");
54 }
55 finally
56 {
57 Cursor.Current=Cursors.Default;
58 }
59 }
2 private void uploadbutton_Click(object sender, System.EventArgs e)
3 {
4 //要上传的文件
5 string fileFullName=this.fileMsglabel.Text;
6
7 if ( !File.Exists(fileFullName) )
8 {
9 MessageBox.Show("请选择图片");
10 return;
11 }
12
13 int i=fileFullName.LastIndexOf("\\");
14
15 Cursor.Current=Cursors.WaitCursor;
16
17 try
18 {
19 //调用WEB服务
20 ReportWebService.ReportWebService r=new ReportWebService.ReportWebService();
21
22 //要上传的文件名
23 string fileName=fileFullName.Substring(i+1);
24
25 //创建文件的实例
26 FileInfo f=new FileInfo(fileFullName);
27
28 //创建只读 FileStream
29 FileStream fileStream = f.OpenRead() ;
30
31 byte[] byteArray= new byte[f.Length];
32
33 //从流中读取字节并将该数据写入给定数组中
34 fileStream.Read(byteArray,0,Convert.ToInt32( f.Length ));
35
36 //开始调用web服务器上的公用方法
37 if ( !r.UploadFile(byteArray,fileName) )
38 {
39 MessageBox.Show("数据上传失败!");
40 }
41 else
42 {
43 MessageBox.Show("数据上传成功!");
44 }
45
46 //关闭流文件
47 fileStream.Close();
48 fileStream=null;
49
50 }
51 catch
52 {
53 MessageBox.Show("数据上传失败!");
54 }
55 finally
56 {
57 Cursor.Current=Cursors.Default;
58 }
59 }
图片效果如下:
选择文件
上传数据成功
收藏与分享
RSS订阅我 什么是RSS?
东莞.net俱乐部
我的系列文章
A.Sql Server2005 Transact-SQL 新兵器学习 B.MCAD学习
C.代码阅读总结
D.ASP.NET状态管理
E.DB(数据库)
F.WAP
G.WinForm
H.Flex
希望上面提到的知识对您有所提示,同时欢迎交流和指正
作者:aierong
出处:http://www.cnblogs.com/aierong
贴子以"现状"提供且没有任何担保,同时也没有授予任何权利!
本文版权归作者所有,欢迎转载!
原创技术文章和心得,转载注明出处!这也是对原创者的尊重!