Je télécharge des images sur une application Rails via PaperClip Strong> GEM que je veux que seuls les administrateurs sur le backend pour pouvoir visualiser. En conséquence, je les ai définies comme privées. Puis j'ai recherché une solution sur la manière dont il suffit d'administrer des liens spécifiques pouvant afficher les fichiers. C'est ce que je a trouvé . P> Je suis allé Pour essayer cela, mais j'ai du mal à créer la signature nécessaire. La formule est donnée sur la liaison ci-dessus et est la suivante: p> Signature = URL-Encode( Base64( HMAC-SHA1( YourSecretAccessKeyID, UTF-8-Encoding-Of( StringToSign ) ) ) );
StringToSign = HTTP-VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Expires + "\n" +
CanonicalizedAmzHeaders +
CanonicalizedResource;
3 Réponses :
Tout d'abord, il n'y a pas de différence entre pouvoir visualiser une image dans le navigateur ou pouvoir télécharger une image. Dans les deux cas, le navigateur de l'utilisateur obtient les octets qui composent l'image et peuvent faire ce qu'il veut avec eux.
Amazon fournit le gemme AWS-SDK comme moyen officiellement soutenu d'accéder à leurs services, y compris S3. Pour générer une URL S3 présigné, vous feriez quelque chose comme p> qui renvoie un lien valide pendant 1 heure (cela suppose que vous avez des informations d'identification fournies ou que des variables d'environnement aws_access_key_id code> et
aws_secret_access_key code> avec vos informations d'identification. Sinon, vous devez spécifier ensuite lors de la création de l'objet de ressource.) p> p> p>
Frederick, merci pour l'entrée. Y a-t-il un endroit où vous avez? Je veux lire plus d'où les clés sont placées, où le lien est placé et comment je peux fournir ceci à mes besoins. Par exemple, est la "clé / pour / objet" du chemin et du nom du fichier? Où puis-je passer les clés?
S3 n'a pas vraiment des chemins - les objets ont des clés, bien qu'ils soient souvent affichés en tant que chemins. Le meilleur endroit pour commencer est probablement le doctorat docs.aws.amazon.com/sdkforruby/api < / a>. Le blog AWS Ruby a également beaucoup d'exemples
Définit un téléchargeable? Méthode qui peut être utilisée pour implémenter les droits d'accès des utilisateurs sur la piste. Pour la simplicité, il suffit de permettre à tous les utilisateurs connectés d'accéder à la piste, mais vous pouvez le remplacer avec la logique que votre application nécessite.
has_attached_file :mp3, :url => ':s3_domain_url', :path => 'assets/:class/:id/:style.:extension', :storage => :s3, :s3_credentials => File.join(Rails.root, 'config', 's3.yml'), :s3_permissions => 'authenticated-read', :s3_protocol => 'http'
Puisque vous utilisez PaperClip, vous pouvez simplement utiliser son J'ajouterai que bien que les DOC ci-dessus recommandent 10 minutes pour l'heure d'expiration, j'ai constaté que si l'horloge de votre serveur oblige à une autre et à incliner une autre, l'URL peut Évidemment, si vous ajoutez une action du contrôleur de ce type, assurez-vous que seuls les administrateurs sont autorisés à l'utiliser. P> expirant_url code> fonctionnalité
. Donc, vous pouvez avoir un #show code> ou
#download code> action du contrôleur qui redirige juste à l'URL temporaire. Il n'est pas nécessaire de tout mettre en œuvre vous-même. P>
C'est la solution la plus facile. Tout ce dont vous avez besoin est le gemme 'AWS-SDK' et PaperClip. Définissez vos options PaperClip pour utiliser S3 et définissez la S3_Perrissions sur privée I.E. "HAS_ATTACHED_FILE: document,: S3_Perrissions =>: privé,: stockage => 'S3'"