Amazon S3 用REST方式获取文件 具体参见API http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html
利用C#构建下面的请求
GET /ObjectName HTTP/1.1 Host: BucketName.s3.amazonaws.com Date: date Authorization: signatureValue Range:bytes=byte_range
伪代码:
1 HttpWebRequest request = WebRequest.Create("URL") as HttpWebRequest; 2 WebHeaderCollection headers = (request as HttpWebRequest).Headers; 3 4 string httpDate 5 = DateTime.UtcNow.ToString("ddd, dd MMM yyyy HH:mm:ss ", System.Globalization.DateTimeFormatInfo.InvariantInfo) + "GMT "; 6 7 8 string canonicalString = "PUT /test1.doc \n\n\n x-amz-date:" + httpDate + "\n/"; 9 10 Encoding ae = new UTF8Encoding(); 11 12 HMACSHA1 signature = new HMACSHA1(); 13 14 signature.Key = ae.GetBytes("SerectID"); 15 byte[] bytes = ae.GetBytes(canonicalString); 16 byte[] moreBytes = signature.ComputeHash(bytes); 17 18 string encodedCanonical = Convert.ToBase64String(moreBytes); 19 20 headers.Add("Authorization", "AWS AccessID" +":" + encodedCanonical); 21 22 request.Method = "PUT"; 23 request.Date = DateTime.UtcNow; 24 25 string postData = @"test-1.doc"; 26 byte[] byteArray = Encoding.UTF8.GetBytes(postData); 27 28 request.ContentType = "text/plain"; // "application/x-www-form-urlencoded"; 29 30 request.ContentLength = byteArray.Length; 31 32 Stream dataStream = request.GetRequestStream(); 33 34 dataStream.Write(byteArray, 0, byteArray.Length); 35 36 dataStream.Close(); 37 38 WebResponse response = request.GetResponse(); 39 40 Console.WriteLine(((HttpWebResponse)response).StatusDescription); 41 42 dataStream = response.GetResponseStream(); 43 44 StreamReader reader = new StreamReader(dataStream); 45 46 string responseFromServer = reader.ReadToEnd(); 47 48 reader.Close(); 49 dataStream.Close(); 50 response.Close();