2009-05-22 111 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。

相關問題