2009-06-09 5 views
2

J'ai POSTing HTML direct à un compartiment S3 fonctionnant pour le compartiment A. Si je garde tout le code exactement le même mais remplace et signe la politique pour le compartiment B, Amazon renvoie une erreur InvalidPolicyDocument. Y a-t-il quelque chose à propos d'un compartiment qui doit être activé ou défini avant d'accepter les objets affichés?S3 post InvalidPolicyDocument dépend du compartiment?

Merci d'avance! Ben

ps. J'ai changé le nom du compartiment à la fois dans la règle et dans l'URL de téléchargement.

pps. comme demandé, j'ai tracé les deux demandes dans Fiddler. Voici les demandes et les réponses:

LA DEMANDE BON:

DEMANDE:

------------ae0KM7cH2cH2cH2Ij5Ef1cH2Ef1ae0 
Content-Disposition: form-data; name="Filename" 

Blue hills.jpg 
------------ae0KM7cH2cH2cH2Ij5Ef1cH2Ef1ae0 
Content-Disposition: form-data; name="key" 

uploads/${filename} 
------------ae0KM7cH2cH2cH2Ij5Ef1cH2Ef1ae0 
Content-Disposition: form-data; name="signature" 

STJNaC3bFVXD9VSUPhId41yw5+w= 
------------ae0KM7cH2cH2cH2Ij5Ef1cH2Ef1ae0 
Content-Disposition: form-data; name="AWSAccessKeyId" 

0WDZ435HNTSCJ306SXR2 
------------ae0KM7cH2cH2cH2Ij5Ef1cH2Ef1ae0 
Content-Disposition: form-data; name="acl" 

private 
------------ae0KM7cH2cH2cH2Ij5Ef1cH2Ef1ae0 
Content-Disposition: form-data; name="success_action_status" 

201 
------------ae0KM7cH2cH2cH2Ij5Ef1cH2Ef1ae0 
Content-Disposition: form-data; name="policy" 

eydjb25kaXRpb25zJzogW3snYnVja2V0JzogJzB3ZHo0MzVobnRzY2ozMDZzeHIyLXRlc3QtYnVja2V0J30sIFsnc3RhcnRzLXdpdGgnLCAnJGtleScsICd1cGxvYWRzLyddLCBbJ3N0YXJ0cy13aXRoJywgJyRGaWxlbmFtZScsICcnXSwgeydhY2wnOiAncHJpdmF0ZSd9LCB7J3N1Y2Nlc3NfYWN0aW9uX3N0YXR1cyc6ICcyMDEnfV0sICdleHBpcmF0aW9uJzogJzIwMDktMDYtMTBUMTg6MTc6NTlaJ30= 
------------ae0KM7cH2cH2cH2Ij5Ef1cH2Ef1ae0 
Content-Disposition: form-data; name="file"; filename="Blue hills.jpg" 
Content-Type: application/octet-stream 

RÉPONSE:

<?xml version="1.0" encoding="UTF-8"?> 
<PostResponse><Location>http://0wdz435hntscj306sxr2-test-bucket.s3.amazonaws.com/uploads%2FBlue+hills.jpg</Location><Bucket>0wdz435hntscj306sxr2-test-bucket</Bucket><Key>uploads/Blue hills.jpg</Key><ETag>"6fb2a38dc107eacb41cf1656e899cf70"</ETag></PostResponse> 

LA DEMANDE BAD:

DEMANDE:

------------Ij5cH2cH2gL6gL6gL6Ij5Ij5GI3cH2 
Content-Disposition: form-data; name="Filename" 

Water lilies.jpg 
------------Ij5cH2cH2gL6gL6gL6Ij5Ij5GI3cH2 
Content-Disposition: form-data; name="policy" 

eydjb25kaXRpb25zJzogW3snYnVja2V0JzogdScwd2R6NDM1aG50c2NqMzA2c3hyMi1tNGxiZXRhJ30sIFsnc3RhcnRzLXdpdGgnLCAnJGtleScsICd1cGxvYWRzLyddLCBbJ3N0YXJ0cy13aXRoJywgJyRGaWxlbmFtZScsICcnXSwgeydhY2wnOiAncHJpdmF0ZSd9LCB7J3N1Y2Nlc3NfYWN0aW9uX3N0YXR1cyc6ICcyMDEnfSwgeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ31dLCAnZXhwaXJhdGlvbic6ICcyMDA5LTA2LTEwVDE4OjA5OjE0Wid9 
------------Ij5cH2cH2gL6gL6gL6Ij5Ij5GI3cH2 
Content-Disposition: form-data; name="key" 

uploads/${filename} 
------------Ij5cH2cH2gL6gL6gL6Ij5Ij5GI3cH2 
Content-Disposition: form-data; name="signature" 

u+pOKfpLrFaRhiP3lfTPbCyWl3I= 
------------Ij5cH2cH2gL6gL6gL6Ij5Ij5GI3cH2 
Content-Disposition: form-data; name="AWSAccessKeyId" 

0WDZ435HNTSCJ306SXR2 
------------Ij5cH2cH2gL6gL6gL6Ij5Ij5GI3cH2 
Content-Disposition: form-data; name="acl" 

private 
------------Ij5cH2cH2gL6gL6gL6Ij5Ij5GI3cH2 
Content-Disposition: form-data; name="success_action_status" 

201 
------------Ij5cH2cH2gL6gL6gL6Ij5Ij5GI3cH2 
Content-Disposition: form-data; name="Content-Type" 

application/octet-stream 
------------Ij5cH2cH2gL6gL6gL6Ij5Ij5GI3cH2 
Content-Disposition: form-data; name="file"; filename="Water lilies.jpg" 
Content-Type: application/octet-stream 

RÉPONSE:

100 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>InvalidPolicyDocument</Code><Message>Invalid Policy: Invalid JSON.</Message><RequestId>2D883FC8947547AC</RequestId><HostId>G1r2SCbd87UmmlOU0hSY3/VTGGXBEmXdLXoxaGt4GJjpELBVHXtjn6PSAPhufLAC</HostId></Error> 
0 
+0

Pourriez-vous suivre les deux demandes en utilisant Fiddler et publier les résultats? –

+0

Voir ma nouvelle réponse. –

Répondre

3

Assurez-vous de changer le nom du seau à la fois l'URL d'action et dans le document de politique.

MISE À JOUR

Voici les base64 décodée versions des deux politiques:

BONNES

{ 
    'conditions': [ 
    { 
     'bucket': '0wdz435hntscj306sxr2-test-bucket' 
    }, 
    ['starts-with', '$key', 'uploads/'], 
    ['starts-with', '$Filename', ''], 
    { 
     'acl': 'private' 
    }, 
    { 
     'success_action_status': '201' 
    } 
    ], 
    'expiration': '2009-06-10T18:17:59Z' 
} 

BAD

{ 
    'conditions': [ 
    { 
     'bucket': u'0wdz435hntscj306sxr2-m4lbeta' 
    }, 
    ['starts-with', '$key', 'uploads/'], 
    ['starts-with', '$Filename', ''], 
    { 
     'acl': 'private' 
    }, 
    { 
     'success_action_status': '201' 
    }, 
    { 
     'Content-Type': 'application/octet-stream' 
    } 
    ], 
    'expiration': '2009-06-10T18:09:14Z' 
} 

D'une façon ou d'une autre, un "u" supplémentaire s'est coincé dans la ligne de la mauvaise politique

+0

merci. le nom du compartiment est en effet modifié aux deux endroits. – mainsocial

+0

Merci Bryce! L'extra u est pour une chaîne unicode, qui est le type de chaîne Python par défaut lorsque vous travaillez avec Google App Engine. Vraisemblablement, je dois le convertir en une chaîne normale en utilisant str() avant d'encoder la politique. Belle prise! – mainsocial

Questions connexes