2017-06-21 4 views
6

Je suis nouveau sur S3 et je dois l'utiliser pour stocker des images. J'ai trouvé une version demi-douzaine d'un s2wrapper pour cf, mais il semble que le seul jeu de pour v4 est un modifié par LeighUtilisation de la version de Leigh de S3Wrapper.cfc Impossible de passer Init

https://gist.github.com/Leigh-/26993ed79c956c9309a9dfe40f1fce29

droppée dans le répertoire com et créé une page « test » qui contient le code suivant:

s3 = createObject('component','com.S3Wrapper').init(application.s3.AccessKeyId,application.s3.SecretAccessKey); 

mais a l'erreur suivante: enter image description here

donc j'ai changé la ligne 37 de

variables.Sv4Util = createObject('component', 'Sv4').init(arguments.S3AccessKey, arguments.S3SecretAccessKey);

à

variables.Sv4Util = createObject('component', 'Sv4Util').init(arguments.S3AccessKey, arguments.S3SecretAccessKey);

Maintenant, je reçois: enter image description here

Je me sens comme passer par le code Leigh et commencer à changer les choses est une mauvaise idée car je rôdait ici pour l'année un savoir Le code de Leigh est solide.

Est-ce que quelqu'un sait s'il y a des exemples sur comment l'utiliser n'importe où? Si ce n'est pas ce que je fais mal. Si cela fait la différence, j'utilise Lucee 5 et pas le moteur CF d'Adobe.

MISE À JOUR:

je suivais les instructions de Leigh et l'erreur est maintenant disparu. Je suis addedsome plus de code à ma page de test qui ressemble maintenant à ceci:

<cfscript> 
    s3 = createObject('component','com.S3v4').init(application.s3.AccessKeyId,application.s3.SecretAccessKey); 

    bucket = "imgbkt.domain.com"; 
    obj = "fake.ping"; 
    region = "s3-us-west-1" 

    test = s3.getObject(bucket,obj,region); 
    writeDump(test); 
    test2 = s3.getObjectLink(bucket,obj,region); 
    writeDump(test2); 

    writeDump(s3); 
</cfscript> 

Peu importe ce que je mets dans seau, obj ou de la région que je reçois: enter image description here

JIC Je suis allé à AWS et obtenir nouvelles clés: enter image description here

Leigh si vous êtes toujours là ou quelqu'un qui a utilisé l'un des s3Wrappers des suggestions ou des conseils?

MISE À JOUR # 2: Même après l'aide d'Alex, je ne suis pas capable de faire fonctionner cela. Le lien que je reçois de getObjectLink n'est pas valide et getObject ne télécharge jamais un objet. Je pensais que je voudrais essayer la méthode PutObject

test3 = s3.putObject(bucketName=bucket,regionName=region,keyName="favicon.ico"); 
writeDump(test3); 

pour voir s'il y a des informations supplémentaires, j'ai reçu ceci: enter image description here

J'ai trouvé cet article https://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html mais il est assez vieux et depuis S3 suggère spécifiquement l'utilisation points dans les noms de seau je ne pense pas que ce soit plus pertinent. Il y a évidemment quelque chose que je fais de mal mais j'ai passé des heures à essayer de résoudre cela et je n'arrive pas à comprendre ce que cela pourrait être.

+1

dénomination Bad de ma part (pour différencier la version signature 4) Il a besoin de deux composants:.. l'emballage S3 et utilitaire SV4 A) Enregistrer [le composant S3] (https://gist.gi thubusercontent.com/Leigh-/26993ed79c956c9309a9dfe40f1fce29/raw/da1caf605370705a7d258fcddbcb79994af60162/S3Wrapper.cfc) comme 'S3v4.cfc' et B) [L'utilitaire Signature 4] (https://gist.github.com/Leigh-/a2798584b79fd9072605a4cc7ff60df4#file- sv4util-cfc) comme 'Sv4.cfc' (les deux dans votre répertoire' com'). Puis ajoutez 'com' au chemin CFC sur la ligne 38:' variables.Sv4Util = createObject ('component', 'com.Sv4') .init (...); ' – Leigh

+0

.. (suite) Merci pour le la tête haute! Je vais arranger les choses (donc c'est plus clair) demain. – Leigh

+0

Quel est exactement le problème? Quels sont les résultats attendus pour quelle fonction appelle? – Alex

Répondre

0

je vais vous donner un aperçu de ce que fait le code:

getObjectLink renvoie une URL HTTP pour le fichier fake.ping qui se trouve à la recherche dans le seau imgbkt.domain.com de la région s3-us-west-1. Ce lien est temporaire et expire après 60 secondes par défaut.

getObject appelle immédiatement getObjectLink et demande immédiatement l'URL à l'aide de HTTP GET. La réponse est ensuite enregistrée dans le répertoire du S3v4.cfc avec le nom de fichier fake.ping par défaut. Enfin, la fonction retourne le chemin complet du fichier téléchargé: E:\wwwDevRoot\taa\fake.ping

Pour enregistrer le fichier dans un autre emplacement, vous invoquez:

downloadPath = 'E:\'; 
test = s3.getObject(bucket,obj,region,downloadPath); 
writeDump(test); 

La requête HTTP est synchrone, ce qui signifie le fichier sera téléchargé complètement lorsque les fonctions retourne le chemin du fichier.

Si vous souhaitez accéder au contenu réel du fichier, vous pouvez le faire:

test = s3.getObject(bucket,obj,region); 

contentAsString = fileRead(test); // returns the file content as string 
// or 
contentAsBinary = fileReadBinary(test); // returns the content as binary (byte array) 

writeDump(contentAsString); 
writeDump(contentAsBinary); 

(Vous pouvez diffuser le contenu si le fichier est volumineux depuis fileRead/fileReadBinary lit le fichier entier dans . tampon Use fileOpen to stream the content.

Est-ce que vous aider

+0

J'ai ajouté "Update # 2" à ma question initiale. Je pense toujours qu'il y a quelque chose que je fais de mal et après avoir essayé un putObject, je reçois plus d'informations pour le supporter. – Lance