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();



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值