Forcer le téléchargement à partir de serveurs amazon s3
J'ai été le développement d'une nouvelle application web qui s'appuie sur Amazon S3 les serveurs en tant que système de stockage, et Codeiginter que le framework PHP.
J'ai besoin de la force du fichier à télécharger lorsque le lien est cliqué. L'URL d'origine ressemble à ceci:
http://www.our-web.com/download/do/1.jpg
qui génère un temporaire signé URL pour le fichier réel sur les serveurs Amazon S3 comme ceci:
http://main_bucket.s3.amazonaws.com/post/1/1.jpg?AWSAccessKeyId=AKIAJEOQKYPKC3CCU5RA&Expires=1305395426&Signature=iuzCdA22gImLK192%2BMAhk8OkAY8%3D
J'ai besoin de faire le fichier de commencer le téléchargement de la vraie Amazone URL dès que l'utilisateur clique sur le lien.
J'ai deux façons de le faire:
- Utilisation
redirect()
qui va ouvrir le fichier n'est pas le télécharger; ou - Modifier les en-têtes comme ce code:
header('Content-type: application/force-download'); header('Content-Disposition: attachment; filename=' . $file_name); header('Content-Transfer-Encoding: binary'); header('Expires: 4000'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($generated_file)); readfile($generated_file);
Malheureusement, les deux façons de ne pas m'aider. La deuxième méthode causes de la télécharger à venir à partir de mon site et de ne pas partir directement d'Amazon.
Comment puis-je forcer le fichier à télécharger directement à partir de la les serveurs Amazon S3, et non pas à partir de mon site web?
source d'informationauteur Khaled
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin de régler les paramètres des en-têtes des fichiers et des dossiers dans S3, afin de forcer le navigateur à télécharger plutôt que de l'ouverture du fichier. Définir ces:
Vous aurez besoin de les définir lors du téléchargement de fichiers à S3. Avec le SDK php que vous souhaitez utiliser
create_object
.Ou vous pouvez définir ces après le téléchargement en utilisant 'change_content_type' ou par copier le fichier sur lui-même en S3 et le réglage de l'en-têtes.
La question est sur la définition de cette programmation, mais de le faire manuellement via la console AWS:
Peu en retard à la fête, mais souvent avec un fichier que vous ne voulez pas avoir à décider de la durée de stockage, la façon dont il sera utilisé. Vous voulez être en mesure de stocker une fois le fichier, puis dans une zone probablement intégrer le fichier ou affichage dans le navigateur, et dans une autre région permettre à l'utilisateur de télécharger le même fichier.
Heureusement, vous pouvez le faire en fournissant remplacer les paramètres dans l'url de la requête. Il ne fonctionne qu'avec les demandes, mais heureusement, vous êtes déjà ce que.
Si vous ajoutez un paramètre comme la
&request-content-type="application/force-download"
cela devrait faire l'affaire.Découvrez la les Paramètres de la Demande section de la S3 OBTENIR l'Objet de la documentation:
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html
Vous ne pouvez pas dire au navigateur comment gérer un fichier distant. En le redirigeant amazon vous dites le navigateur pour commencer une nouvelle demande. Vous n'avez pas de contrôle sur cette demande.
La seule solution que je vois est de paquet de l'image dans un fichier zip ou similaire. Bien sûr, ajoute un autre (probablement ennuyeux) forme de complexité.