首页  ·  知识 ·  编程语言
图片从PDA端上传到Web服务器
佚名  http://www.cnblogs.com/yqy542006/  .NET  编辑:dezai  图片来源:网络
概述:本文将教你如何利用C#和Pocket PC技术将智能终端上的图片上传到Web服务器。示例代码是我做试验的核心部分,终端设备采用的是装有Pocket PC 2003的PDA

概述:本文将教你如何利用C#和Pocket PC技术将智能终端上的图片上传到Web服务器。示例代码是我做试验的核心部分,终端设备采用的是装有Pocket PC 2003的PDA,PDA端程序采用C#编写,Web服务器程序也是用C#写的ASP.NET程序。没有提供完成的工程压缩包下载,基于的原因首先是因为我觉得只要拥有核心代码就可以解决问题,其次,说真的,我还不知道怎样往博客上放这些压缩包。如果各位网友在调试过程中出现什么问题,再和我联系。好,尽快进入正文。
   这种问题在传统的B/S开发体系中,本应该是个非常容易解决的问题。但是我们现在面临的是M/S,即:Mobile/Server,这个领域在技术上有很多局限性,或者相比之下不那么方便。我曾经尝试往Web页面上放入File Field控件,但是这个页面在Pocket PC Internet Exproer中并不会显示。我们当然也可以通过Socket,建立一个TCP通道,再传送过去,这样简直再容易不过了。但是有时候我们的主要系统是Web系统,往这个服务器上放一个Windows应用程序,或者服务,真的是件非常别扭的事情,而且因为要多开辟一个侦听端口会增加安全方面的风险,有时候可能还得受到代理服务器的限制等等。

   我所采用的方案是通过Post方式将图片提交给某个ASP.NET页面,由这个页面的程序来获取图片数据。

   首先在智能终端窗体应用项目中的FUploadFile窗体中,添加一个textBox_fileName输入框和一个button_selectFile按钮,用于选择图片文件,以及一个button_submit按钮用于提交图片。

   button_selectFile按钮的事件函数代码如下:

  private void button_selectFile_Click(object sender, System.EventArgs e)
  {
   DialogResult res = openFileDialog1.ShowDialog();
   if(res.Equals(DialogResult.OK))
   {
    textBox_fileName.Text = openFileDialog1.FileName;
   }
  }
 

   button_submit按钮的事件函数代码如下:

  private void button_submit_Click(object sender, System.EventArgs e)
  {
   if( ! textBox_fileName.Text.Trim().Equals(""))
   {
    string loadFile = textBox_fileName.Text.Trim();
    string urlStr = @"http://192.168.1.15/UploadFileFromPdaToWebSite/UploadFile.aspx?name=文件的名称";
    UploadFileBinary(loadFile,urlStr);
   }
   else
   {
    string alStr = "您还没有选择文件";
    MessageBox.Show(alStr,"系统提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button1);
   }
  }
 

   上面代码中调用了一个UploadFileBinary私有方法,它的代码如下:

  public void UploadFileBinary(string localFile, string uploadUrl)
  {
   try
   {

    FileStream rdr = new FileStream(localFile, FileMode.Open);
    byte[] inData = new byte[4096];
    int totbytes = 0;
    MemoryStream postData = new MemoryStream();
    int bytesRead = rdr.Read(inData, 0, inData.Length);
    while (bytesRead > 0)
    {
     postData.Write(inData, 0, bytesRead);
     bytesRead = rdr.Read(inData, 0, inData.Length);
     totbytes += bytesRead;
    }
    rdr.Close();
    postData.Position = 0;
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uploadUrl);
    req.Method = "POST";
    req.ContentLength = (long)postData.Length;
    using (Stream s = req.GetRequestStream())
    {
     s.Write(postData.ToArray(), 0, (int)postData.Length);
     postData.Close();
    }              
    WebResponse resp = req.GetResponse();
    resp.Close();
   }
   catch (Exception ex)
   {    
    string exContent;
    exContent = ex.ToString();
    MessageBox.Show(exContent);

   }

  }
 

   PDA端的程序设计大概就是如此了,下面我们再来看Web服务器端的程序是如何接收图片的吧!

   建立一个ASP.NET程序文件:UploadFile.aspx,在Page_Load事件函数中写下如下代码就可以了:

  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   byte[] theData = null;
   String ls_name
   if (Request.ServerVariables["REQUEST_METHOD"].ToString().ToUpper() == "POST")
   {
    theData = Request.BinaryRead(Request.ContentLength);
   //获取文件名称
    ls_name = Request.QueryString("name");        
    //string picName = DateTime.Now.Ticks.ToString() + ".gif"; 
    //string picName = DateTime.Now.Ticks.ToString() + ".jpg";
    FileStream stm = new FileStream(Server.MapPath(ls_name),System.IO.FileMode.CreateNew);
    stm.Write(theData, 0, (int)theData.Length);
    stm.Close();
   }
   else
   {
    Response.write("测试");
   }

  }
 

   感觉是不是很有趣呢?

在有些时候用这个方法确实不错,还有更高级的用法参考:
Improving .NET Compact Framework HTTP Communications using HttpWebRequest and Custom ASP.NET Providers
http://msdn2.microsoft.com/en-us/library/aa446517.aspx
本文作者:佚名 来源:http://www.cnblogs.com/yqy542006/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读