2009-05-22 206 views
0

我正在研究.net上的移动应用程序。这是一个Windows移动应用程序。我在这个应用程序中面临一个问题,我想上传一个图像/文件给定的网址/服务器。许多上传类不使用像Webclient,WebRequest,WebResponse。我用HttpWebRequest,那不是连接服务器。请任何人都可以帮助我如何上传图像在Windows Mobile 6给定的URL在.net。从移动应用程序上传服务器上的图像

在此先感谢。

+0

什么代码,你到目前为止? – 2009-05-22 10:10:56

+0

*确切的*愚蠢(对信):http://stackoverflow.com/questions/897120/upload-images-in-windows-mobile-6-in-net – ctacke 2009-05-22 13:39:13

回答

0

嘿看看这个代码在图像小屋上传:

你可以修改它通过只使用招来改变网页与其他网站使用要求

public class Uploader 
    { 

     public string UploadFileToImageShack(object oFileName) 
     { 
      try 
      { 
       string fileName = oFileName as string; 
       string contentType = null; 
       CookieContainer cookie = new CookieContainer(); 
       NameValueCollection col = new NameValueCollection(); 
       col["MAX_FILE_SIZE"] = "3145728"; 
       col["refer"] = ""; 
       col["brand"] = ""; 
       col["optimage"] = "1"; 
       col["rembar"] = "1"; 
       col["submit"] = "host it!"; 
       List<string> l = new List<string>(); 
       switch (fileName.Substring(fileName.Length - 3, 3)) 
       { 
        case "jpg": 
         contentType = "image/jpeg"; 
         break; 
        case "peg": 
         contentType = "image/jpeg"; 
         break; 
        case "gif": 
         contentType = "image/gif"; 
         break; 
        case "png": 
         contentType = "image/png"; 
         break; 
        case "bmp": 
         contentType = "image/bmp"; 
         break; 
        case "tif": 
         contentType = "image/tiff"; 
         break; 
        case "iff": 
         contentType = "image/tiff"; 
         break; 
        default: 
         contentType = "image/unknown"; 
         break; 
       } 

       string resp; 
       col["optsize"] = "resample"; 
       resp = UploadFileEx(fileName, 
               "http://www.imageshack.us/index.php", 
               "fileupload", 
               contentType, 
               col, 
               cookie); 
       return resp; 


      } 
      catch (Exception ex) 
      { 
       return ""; 
      } 
     } 



     public static string UploadFileEx(string uploadfile, string url, 
      string fileFormName, string contenttype, System.Collections.Specialized.NameValueCollection querystring, 
      CookieContainer cookies) 
     { 
      if ((fileFormName == null) || 
       (fileFormName.Length == 0)) 
      { 
       fileFormName = "file"; 
      } 

      if ((contenttype == null) || 
       (contenttype.Length == 0)) 
      { 
       contenttype = "application/octet-stream"; 
      } 


      string postdata; 
      postdata = "?"; 
      if (querystring != null) 
      { 
       foreach (string key in querystring.Keys) 
       { 
        postdata += key + "=" + querystring.Get(key) + "&"; 
       } 
      } 
      Uri uri = new Uri(url + postdata); 


      string boundary = "----------" + DateTime.Now.Ticks.ToString("x"); 
      HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri); 
      webrequest.CookieContainer = cookies; 
      webrequest.ContentType = "multipart/form-data; boundary=" + boundary; 
      webrequest.Method = "POST"; 


      // Build up the post message header 
      StringBuilder sb = new StringBuilder(); 
      sb.Append("--"); 
      sb.Append(boundary); 
      sb.Append("\r\n"); 
      sb.Append("Content-Disposition: form-data; name=\""); 
      sb.Append(fileFormName); 
      sb.Append("\"; filename=\""); 
      sb.Append(Path.GetFileName(uploadfile)); 
      sb.Append("\""); 
      sb.Append("\r\n"); 
      sb.Append("Content-Type: "); 
      sb.Append(contenttype); 
      sb.Append("\r\n"); 
      sb.Append("\r\n"); 

      string postHeader = sb.ToString(); 
      byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); 

      // Build the trailing boundary string as a byte array 
      // ensuring the boundary appears on a line by itself 
      byte[] boundaryBytes = 
        Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); 

      FileStream fileStream = new FileStream(uploadfile, 
             FileMode.Open, FileAccess.Read); 
      long length = postHeaderBytes.Length + fileStream.Length + 
                boundaryBytes.Length; 
      webrequest.ContentLength = length; 

      Stream requestStream = webrequest.GetRequestStream(); 

      // Write out our post header 
      requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); 

      // Write out the file contents 
      byte[] buffer = new Byte[checked((uint)Math.Min(4096, 
            (int)fileStream.Length))]; 
      int bytesRead = 0; 
      while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 
       requestStream.Write(buffer, 0, bytesRead); 

      // Write out the trailing boundary 
      requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); 
      WebResponse responce = webrequest.GetResponse(); 
      Stream s = responce.GetResponseStream(); 
      StreamReader sr = new StreamReader(s); 

      return sr.ReadToEnd(); 
     } 


    } 
0

CodeProject上有example code,它使用HttpwebRequest和朋友重新实现WebClient.UploadFile“更多”,乍一看它看起来像使用Compact Framework中提供的功能。您可以在PC上使用完整框架检查代码,然后使用Fiddler这样的工具检查线路上的情况,然后再编译为Compact Framework。

相关问题