He pasado tres días tratando de configurar un formulario de publicación simple para amazon s3. Cada vez que sale este error:Publicación de datos del formulario en el cubo de Amazon S3
SignatureDoesNotMatchThe request signature we calculated does not match the signature you provided. Check your key and signing method.
no veo el problema. :-(
<?php
$form = array(
'key' => 'queue/1_1_1234567890.wmv',
'AWSAccessKeyId' => 'mypublickeyishere',
'acl' => 'public-read',
'success_action_redirect' => 'http://someurl.com',
);
$form['policy'] = '{
"expiration": "2015-12-01T12:00:00.000Z",
"conditions": [
{
"acl": "'.$form['acl'].'"
},
{
"success_action_redirect": "'.$form['success_action_redirect'].'"
},
{
"bucket": "thenameofmybucket"
},
[
"starts-with",
"$key",
"queue/"
]
]
}';
$form['policy_encoded'] = base64_encode($form['policy']);
$form['signature'] = base64_encode(hash_hmac('sha1', base64_encode(utf8_encode($form['policy'])), 'F90mc5kpjuNMPg8XG7iV6bxOzacYhktcw+RVGzpZ'));
?>
<form action="https://thenameofmybucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
<input type="hidden" name="key" value="<?php echo $form['key'] ?>">
<input type="hidden" name="AWSAccessKeyId" value="<?php echo $form['AWSAccessKeyId'] ?>">
<input type="hidden" name="acl" value="<?php echo $form['acl'] ?>">
<input type="hidden" name="success_action_redirect" value="<?php echo $form['success_action_redirect'] ?>">
<input type="hidden" name="policy" value="<?php echo $form['policy_encoded'] ?>">
<input type="hidden" name="signature" value="<?php echo $form['signature'] ?>">
File to upload to S3:
<input name="file" type="file">
<br>
<input type="submit" value="Upload File to S3">
</form>
Me sustituyan el nombre de depósito, así como las claves privadas y públicas anteriores
que siguieron las instrucciones para firmar la política meticulosamente:. http://docs.amazonwebservices.com/AmazonS3/2006-03-01/dev/HTTPPOSTForms.html#HTTPPOSTConstructPolicy
¿Qué me falta? ¿Por qué es el código no funciona
Por cierto, el navegador/sistema operativo estaba fallando, porque estaba enviando campos de formulario que no estaban en la política. Después de agregar x-ignore- a los campos, funcionó. No tengo idea de por qué eso causó un accidente. – reggie
Debe aceptar la respuesta que realmente contiene la solución al problema encontrado. –