2015-02-22 4 views
3

Я пытался загрузить на S3 через почту, и нашел хороший пример:Загрузка на S3 через POST?

<html> 
    <head> 
    <title>S3 POST Form</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    </head> 

    <body> 
    <form action="https://s3-bucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data"> 
     <input type="hidden" name="key" value="uploads/${filename}"> 
     <input type="hidden" name="AWSAccessKeyId" value="YOUR_AWS_ACCESS_KEY"> 
     <input type="hidden" name="acl" value="private"> 
     <input type="hidden" name="success_action_redirect" value="http://localhost/"> 
     <input type="hidden" name="policy" value="YOUR_POLICY_DOCUMENT_BASE64_ENCODED"> 
     <input type="hidden" name="signature" value="YOUR_CALCULATED_SIGNATURE"> 
     <input type="hidden" name="Content-Type" value="image/jpeg"> 
     <!-- Include any additional input fields here --> 

     File to upload to S3: 
     <input name="file" type="file"> 
     <br> 
     <input type="submit" value="Upload File to S3"> 
    </form> 
    </body> 
</html> 

Я знаю, что такое «ключ доступа» означает значение, но то, что о политическом документе и вычисленной подписи? Как их найти или создать?

+0

Это уже поздно, но политика в основном определяет, каково ваше ведомое ведро, каково его разрешение, кто может получить к нему доступ, это объект json, который нужно закодировать в base64 для отправки через эту форму, здесь является ссылкой на него. http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html вот ссылка, описывающая, как создать подпись для aws4 http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html –

ответ

0
<?php 
$form['policy'] = '{ "expiration": "2090-12-30T12:00:00.000Z", 
    "conditions": [ 
    {"bucket": "idclkimages"}, 
    ["starts-with", "$key", "user/user1/"], 
    {"acl": "public-read"}, 
    {"success_action_redirect": "http://idclkimages.s3.amazonaws.com/successful_upload.html"}, 
    ["starts-with", "$Content-Type", "image/"], 
    {"x-amz-meta-uuid": "14365123651274"}, 
    {"x-amz-server-side-encryption": "AES256"}, 
    ["starts-with", "$x-amz-meta-tag", ""], 

    {"x-amz-credential": "PUT-YOUR-ACCESS-KEY-HERE/20901229/ap-south-1/s3/aws4_request"}, 
    {"x-amz-algorithm": "AWS4-HMAC-SHA256"}, 
    {"x-amz-date": "20901229T000000Z" } 
    ] 
}'; 

$form['policy_encoded'] = base64_encode($form['policy']); 
$form['signature'] = base64_encode(hash_hmac('AWS4-HMAC-SHA256', base64_encode(utf8_encode($form['policy'])), 'PUT-YOUR-SECRET-KEY-HERE',true)); 


?> 


<html> 
    <head> 

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

    </head> 
    <body> 

    <form action="http://idclkimages.s3.amazonaws.com/" method="post" enctype="multipart/form-data"> 
    Key to upload: 
    <input type="input" name="key" value="user/user1/${filename}" /><br /> 
    <input type="hidden" name="acl" value="public-read" /> 
    <input type="hidden" name="success_action_redirect" value="http://idclkimages.s3.amazonaws.com/index.php" /> 
    Content-Type: 
    <input type="input" name="Content-Type" value="image/jpeg" /><br /> 
    <input type="hidden" name="x-amz-meta-uuid" value="14365123651274" /> 
    <input type="hidden" name="x-amz-server-side-encryption" value="AES256" /> 
    <input type="text" name="X-Amz-Credential" value="PUT-YOUR-ACCESS-KEY-HERE/20901229/ap-south-1/s3/aws4_request" /> 
    <input type="text" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" /> 
    <input type="text" name="X-Amz-Date" value="20901229T000000Z" /> 

    Tags for File: 
    <input type="input" name="x-amz-meta-tag" value="" /><br /> 
    <input type="hidden" name="Policy" value='<?php echo $form['policy_encoded'] ?>' /> 
    <input type="hidden" name="X-Amz-Signature" value="<?php echo $form['signature'] ?>" /> 
    File: 
    <input type="file" name="file" /> <br /> 
    <!-- The elements after this will be ignored --> 
    <input type="submit" name="submit" value="Upload to Amazon S3" /> 
    </form> 

</html> 
Смежные вопросы