6
votes

Téléchargez un TXT sur Amazon S3

J'utilise le S3 SDK pour télécharger une chaîne (qui sera modifiée dans un fichier TXT). C'est ok à l'aide du SDK. Mais puisque le SDK n'est disponible que pour le nouveau navigateur (par exemple: IE10 +), j'ai besoin de télécharger mon fichier avec un autre moyen (pour le navigateur ancien)

pour le fichier image J'utilise une entrée (type de type) et un formulaire pour le téléchargement < / p> xxx

Cette solution fonctionne uniquement avec le fichier de type d'entrée.

pour une raison de sécurité, je ne peux pas modifier la valeur de l'entrée avec jQuery.

existe une autre façon de télécharger du texte (à l'aide de l'API de repos peut-être)? < / p>


3 commentaires

Cela pourrait éventuellement vous aider: Stackoverflow.com/ Questions / 14882713 / ...


Pouvez-vous clarifier exactement comment vous voulez que le téléchargement se comporte, du point de vue de l'utilisateur? Pourquoi essayez-vous de modifier la valeur de l'entrée de fichier avec jQuery?


Pourquoi n'essayez-vous pas d'exécuter une demande AJAX au code du serveur réaliser le téléchargement? Cela améliorera la sécurité, car il va vraiment masquer la clé et les autres options.


3 Réponses :


1
votes

Je suis curieux de savoir pourquoi vous utilisez un formulaire d'URL pour soumettre ceci à Amazon ... c'est extrêmement insécurisé car vous donnez votre clé d'accès AWS à tout le monde. Premièrement, vous devez rechercher à l'aide de Amazon SDK pour JavaScript , qui devrait fonctionner suffisamment facile avec angular comme une dépendance.

Ensuite, vous devez rechercher Cors sur votre godet S3 ( partage de ressources croisées de domaine) afin que vous puissiez en fait "télécharger" quelque chose sur S3 de n'importe où sans avoir besoin d'authentification (soyez prudent avec cela depuis tout le monde aura accès à celui-ci et peut télécharger N'importe quoi, et si vous ne le configurez pas correctement, peut donner accès à d'autres choses comme supprimées).

Enfin, vous devez simplement utiliser le SDK aws.s3 () .putObject () fonction pour télécharger tout ce dont vous avez besoin pour votre seau S3 public.


2 commentaires

Il n'y a rien d'inquiétant de donner votre clé d'accès. La clé d'accès n'est pas censée être privée. La clé secrète est cependant. Sur la base du code de la question, les demandes sont apparemment signées avec la clé secrète / privée, attendue et correcte.


Aussi Cors, n'a rien à voir avec l'authentification. Vous pouvez définir des règles Cors sur votre seau et vous attendre toujours à ce que les demandes soient authentifiées afin que seuls les utilisateurs que vous autorisez puissent télécharger sur votre godet.



1
votes

Vous pouvez utiliser le formdata pour envoyer le fichier.

var formData = new FormData();

formData.append("key", "{{$parent.keyurl}}");
formData.append("acl", 'public-read');
formData.append("AWSAccessKeyId", '{{$parent.awSAccessKeyIdUrl}}');
formData.append("success_action_redirect", '{{$parent.redirectionUrl}}');
.........
// JavaScript file-like object...
var blob = new Blob('testSample', { type: "text/xml"});
 formData.append("file", blob);

var request = new XMLHttpRequest();
request.open("POST", "upload_target");
request.send(formData);


2 commentaires

Que signifie "upload_target"? De plus, je pense que cela pourrait être var blob = nouveau blob (["Testsample '], {Type:" Texte / XML "});


"upload_target" est le lien vers lequel vous téléchargez le fichier et 'TesTsample' est le contenu du texte du document généré.



0
votes

J'ai trouvé une solution. Pour télécharger un texte, j'ai dû utiliser un membre de la forme avec un nom "fichier".

<form id="disclaimerform" enctype="multipart/form-data" method="post" target="upload_target" class="inline">
    <input type="hidden" name="key" value="{{keydisclaimer}}">
    <input type="hidden" name="acl" value="public-read">
    <input type="hidden" name="AWSAccessKeyId" value="{{awSAccessKeyId}}">
    <input type="hidden" name="success_action_redirect" value="{{redirection}}">
    <input type="hidden" name="x-amz-meta-filename" value="{{disclaimerfilename}}">
    <input type="hidden" name="x-amz-security-token" value="{{session_token}}">
    <input type="hidden" name="policy" value="{{policy}}">
    <input type="hidden" name="signature" value="{{signature}}">
    <div>
        <label></label>
        <textarea style="opacity:0;" name="file" id="disclaimerinput"/>
    </div>
</form>


0 commentaires