2012-08-06 100 views
1

此代碼的問題在於,文件一旦上傳,就不是正確的格式。我正在嘗試上傳.zip文件。使用C#中的POST將文件上傳到Web服務

公共字符串HttpPost(URI字符串,字符串參數) {
的WebRequest的WebRequest = WebRequest.Create(URI);

 NetworkCredential credentials = new NetworkCredential("username", "password"); 
     webRequest.Credentials = credentials; 

     webRequest.ContentType = "application/x-www-form-urlencoded"; 
     webRequest.Method = "POST"; 

     byte[] bytes = Encoding.ASCII.GetBytes(parameter); 
     Stream os = null; 
     try 
     { // send the Post 
      webRequest.ContentLength = bytes.Length; //Count bytes to send 
      os = webRequest.GetRequestStream(); 
      os.Write(bytes, 0, bytes.Length);   //Send it 
     } 
     catch (WebException ex) 
     { 
      MessageBox.Show(ex.Message, "HttpPost: Request error", 
       MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally 
     { 
      if (os != null) 
      { 
       os.Close(); 
      } 
     } 

     try 
     { // get the response 
      WebResponse webResponse = webRequest.GetResponse(); 
      if (webResponse == null) 
      { return null; } 
      StreamReader sr = new StreamReader(webResponse.GetResponseStream()); 
      return sr.ReadToEnd().Trim(); 
     } 
     catch (WebException ex) 
     { 
      MessageBox.Show(ex.Message, "HttpPost: Response error", 
       MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     return null; 
    } 
+0

看看嗎? ASMX,WCF(RESTful或SOAP?),ASP.NET MVC Web-API等? – Dai 2012-08-06 19:25:41

+0

SDO REST API ... – Testifier 2012-08-06 19:33:07

+0

Amazon S3 ...... – Testifier 2012-08-06 19:34:08

回答

1

這個例子如何上傳文件中MyBucket

private const string KeyId = "Your KeyId"; 
    private const string AccessKey = "Your AccessKey"; 
    private const string S3Url = "https://s3.amazonaws.com/"; 

      private static void UploadFile() 
    { 
     var fileData = File.ReadAllBytes(@"C:\123.zip"); 

     string timeStamp = string.Format("{0:r}", DateTime.UtcNow); 
     string stringToConvert = "PUT\n" +        //Http verb 
      "\n" +              //content-md5 
      "application/octet-stream\n" +        //content-type 
      "\n" +              //date 
      "x-amz-acl:public-read"+"\n" +        //date 
      "x-amz-date:" + timeStamp + "\n" +       //optionall 
      "/MyBucket/123.zip";           //resource 
     var ae = new UTF8Encoding(); 
     var signature = new HMACSHA1 {Key = ae.GetBytes(AccessKey)}; 
     var bytes = ae.GetBytes(stringToConvert); 
     var moreBytes = signature.ComputeHash(bytes); 
     var encodedCanonical = Convert.ToBase64String(moreBytes); 

     var url = "https://MyBucket.s3.amazonaws.com/123.zip"; 

     var request = WebRequest.Create(url) as HttpWebRequest; 
     request.Method = "PUT"; 
     request.Headers["x-amz-date"] = timeStamp; 
     request.Headers["x-amz-acl"] = "public-read"; 
     request.ContentType = "application/octet-stream"; 
     request.ContentLength = fileData.Length; 
     request.Headers["Authorization"] = "AWS " + KeyId + ":" + encodedCanonical; 

     var requestStream = request.GetRequestStream(); 
     requestStream.Write(fileData, 0, fileData.Length); 
     requestStream.Close(); 

     using (var response = request.GetResponse() as HttpWebResponse) 
     { 
      var reader = new StreamReader(response.GetResponseStream()); 
      var data = reader.ReadToEnd(); 
     } 
    } 

以您正在使用哪個網絡服務平臺上Amazon S3 REST API

+0

感謝GSerjo,我打算試試這個 – Testifier 2012-08-06 20:32:51

+0

我編輯了我的問題。請看一下。 – Testifier 2012-08-06 21:33:47