WP7 上传文件

上传文件用WebClient类和HttpWebRequest类都可以,但用WebClient无法获取服务器端的返回内容,至少我没发现有什么方法  HttpWebRequest类代码:

  1. /// <summary>

  2. /// 发送内容

  3. /// </summary>

  4. private byte[] bSendingFile = null;




  5. using (IsolatedStorageFileStream sendingZipStream2 = new IsolatedStorageFileStream(strZipFolderName + "/" + strZipFileName, FileMode.Open, isoStorage))

  6. {

  7.   try

  8.   {

  9.     // 要上传的文件

  10.     bSendingFile = new byte[sendingZipStream2.Length];

  11.     sendingZipStream2.Read(bSendingFile, 0, bSendingFile.Length);


  12.     // 根据uri创建HttpWebRequest对象

  13.     HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(F3StaticResource.SendNMSUrl, UriKind.Absolute));

  14.     httpReq.Method = "POST";

  15.     httpReq.ContentType = "multipart/form-data;";


  16.     IAsyncResult asyncResult = httpReq.BeginGetRequestStream(new AsyncCallback(RequestStreamCallback), httpReq);

  17.   }

  18.   catch(Exception ex)

  19.   {

  20.     String strError = ex.ToString();

  21.   }


  22. }




  23. /// <summary>

  24. /// 返回用于将数据写入Stream,写入数据,并发送

  25. /// </summary>

  26. /// <param name="result"></param>

  27. private void RequestStreamCallback(IAsyncResult result)

  28. {

  29.   HttpWebRequest request = result.AsyncState as HttpWebRequest;


  30.   // 返回用于将数据写入某 URI 资源的 Stream

  31.   Stream requestStream = request.EndGetRequestStream(result);

  32. //此处直接写到stream中会有错误,要对流进行组装

  33.   requestStream.Write(bSendingFile, 0, bSendingFile.Length);

  34.   requestStream.Flush();

  35.   requestStream.Close();


  36.   request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);

  37. }


  38. /// <summary>

  39. /// 获取最终的返回结果

  40. /// </summary>

  41. /// <param name="result"></param>

  42. private void ResponseCallback(IAsyncResult result)

  43. {

  44.   try

  45.   {

  46.     HttpWebRequest request = result.AsyncState as HttpWebRequest;

  47.     WebResponse response = request.EndGetResponse(result) as HttpWebResponse;


  48.     if (response != null)

  49.     {

  50.       Stream responseStream = response.GetResponseStream();

  51.       using (StreamReader streamReader = new StreamReader(responseStream))

  52.       {

  53.         String strResponese = streamReader.ReadToEnd();//返回内容


  54.       }


  55.     }

  56.   }

  57.   catch (Exception ex)

  58.   {

  59.     String strError = ex.ToString();

  60.   }

  61. }

多上传的stream进行组装

// 返回用于将数据写入某 URI 资源的 Stream

  Stream requestStream = request.EndGetRequestStream(result);

    // 构造发送数据
           StringBuilder sb = new StringBuilder();
           // 文件域的数据
           sb.Append("--" + boundary);
           sb.Append("\r\n");
           sb.Append("Content-Disposition: form-data; name=\"upload_file\";filename=\"image.wav\"");
           sb.Append("\r\n");
           sb.Append("Content-Type: ");
           sb.Append("audio/wav");
           sb.Append("\r\n\r\n");

           string postHeader = sb.ToString();
           byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);
           requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

  requestStream.Write(bSendingFile, 0, bSendingFile.Length);
  byte[] b3 = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "--");

  requestStream.Write(b3, 0, b3.Length);


  requestStream.Flush();

  requestStream.Close();


http://blog.csdn.net/jazywoo123/article/details/7482637



你可能感兴趣的:(上传文件,wp7)