Comment faire pour télécharger sur AWS S3 directement à partir du navigateur à l'aide d'un pré-signé URL à la place des pouvoirs?
Nous aimerions utiliser Javascript SDK AWS pour télécharger des fichiers à S3, mais sans l'aide des informations d'identification à tous.
Le téléchargement en utilisant les informations d'identification des œuvres, mais nous ne pouvons pas générer un AWS IAM utilisateur pour chacun de nos utilisateurs de l'application (ou devrions-nous?)
Par conséquent, similaire à l'utilisation de l'OBTENIR, nous aimerions le serveur pour générer un pré-signé URL, et de l'envoyer au navigateur, et ont le navigateur de télécharger à cette URL.
Cependant, il n'y a pas d'exemples sur la façon d'accomplir ceci.
Aussi, si ce n'est la fixation d'un justificatif d'identité, avant même le téléchargement de S3 demande, le SDK erreurs avec
code: "CredentialsError"
message: "No credentials to load"
La JS SDK docs mentionner, de sorte qu'il semble qu'il serait possible:
Pre-signing a putObject (asynchronously)
var params = {Bucket: 'bucket', Key: 'key'};
s3.getSignedUrl('putObject', params, function (err, url) {
console.log('The URL is', url);
});
- quelle est la clé ici ?? En outre, sans ACCESS_ID_KEY et SECRET_KEY comment r u demandant serveur pour la signature de l'URL ?
- fineuploader-s3-client-demo.s3.amazonaws.com/index.html
Vous devez vous connecter pour publier un commentaire.
Calme de la vieille question, mais ça m'a aidé un peu pour le faire finalement fait.
Ma solution est basé sur PHP et JavaScript avec jQuery.
J'ai la solution complète joliment enveloppé à https://github.com/JoernBerkefeld/s3SignedUpload mais voici l'essentiel:
api.php:
assurez-vous de ajouter l'authentification de l'utilisateur à votre api.php. Sinon tout le monde qui sait le chemin d'accès à ce fichier peut télécharger des fichiers sur votre seau.
credentials.inc.php:
client.js:
s3 de la scro paramètres (METTRE & les OPTIONS sont effectivement nécessaires, mais ne peut pas activer les OPTIONS directement...):
Si vous n'êtes pas à l'aide de jQuery, c'est le minimum dont vous avez besoin sur le front-end:
Voir Fichier objet docs: https://developer.mozilla.org/en-US/docs/Web/API/File
Ensuite, vous pouvez ajouter votre avancement du téléchargement comme d'habitude:
Dans le projet, sur ce que je suis aujourd'hui, j'ai l'upload de fichiers par le client directement à S3, dans mon cas ça fonctionne en quelques étapes:
Il est principales parties de code à partir d'elle: https://gist.github.com/zxbodya/3cdabd9172bcc89f8ac5
Que j'ai pu suggérer deux approches:
1 - Vous pouvez générer un pré-signé le formulaire dans votre application, avec un justificatif d'identité
Voir doc: http://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTForms.html
2 - Vous pouvez utiliser web de la fédération d'identité et l'utilisation de connexion avec google, facebook ou amazon:
Voir doc: http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring-wif.html
Aire de jeux: http://aws.typepad.com/aws/2013/08/the-aws-web-identity-federation-playground.html
Je préfère ce nettoyant approche, via github:
Si vous avez déjà un presigned URL générée par le navigateur, vous pouvez tout simplement envoyer une demande XHR avec cette URL et la charge utile de l'upload. S3. Le SDK ne serait pas nécessaire pour ce faire. JQuery exemple ci-dessous:
[Exception... "Access to restricted URI denied" code: "1012" nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)" location: "<unknown>
je suis en supposant qu'il a à faire avec certains de la SCRO politique, mais ne sais pas comment résoudre ce problème au moment où avez-vous dans tout cela? (À l'aide de firefox 31.4.0)S'il vous plaît ajouter
ACL
etContentType
, il le fera de travail.