• Amazon S3 REST方式获取Object


    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();
  • 相关阅读:
    unigui1404在delphi10.2.2安装
    入库单的一些业务逻辑
    mormot日志
    论MORMOT序列的JSON格式
    线程安全的队列
    SynDBOracle.pas
    轻量级的REST中间件
    TQuery
    100亿数据1万属性数据架构设计
    愤怒的TryCatch
  • 原文地址:https://www.cnblogs.com/mvpajun/p/3097001.html
Copyright © 2020-2023  润新知