最近工作原因要用 vs2003 来开发 Pocket PC 方面的软件 .
由于项目需要放弃了项目初期拟定的用 asp.net 移动 WEB 应用程序的开发方式 , 而改用智能设备应用程序来开发产品 .
其实智能设备应用程序开发与 桌面应用程序非常类似 , 也是一种 win 窗体开发 .
该项目为了保持 Pocket PC 中的数据和远程服务器的数据保持一致 , 用到了 web 服务技术 .
其中涉及一个图片上传功能的实现 , 就是把手机拍摄的图片及时发送到远程服务器 .
让我们先建立一个 WEB 服务 SmartDeviceMobileReportWebService
在其中定义一个方法 UploadFile负责接收上传的图片,代码如下:
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
编写上传按钮事件
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 }
图片效果如下:
选择文件
上传数据成功