2017-06-21 1 views
6

を乗り越えることができない私は、S3に新しいですし、画像保存のためにそれを使用する必要があります。私は、CF用s2wrapperの半ダースのバージョンを見つけたが、v4のための一組だけがリーが初期化

によって変更1 comのディレクトリにドロップされた

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

であると表示され、含まれている「テスト」ページを作成しました次のコード:

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

しかし、次のエラーを得た:だから私は

からライン37を変更 enter image description here

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

から

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

今私は取得しています:私は年のためにここに潜んでいるので、enter image description here

私はリーコードを通過するように感じる、物事を変え始めるには悪い考えです知っているリーのコードは確かです。

これをどこでも使用する方法の例があれば知っていますか?もし私が間違っているのではない。違いがある場合は、AdobeのCFエンジンではなくLucee 5を使用しています。

UPDATE:

私はリーの指示に従い、エラーが今なくなっています。私は今、このようになります私のテストページへaddedsomeより多くのコード午前:

かかわらず、私はバケツのために入れ、OBJや地域、私は何を得るの
<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> 

enter image description here

JICは、私がAWSに行き、手に入れました新しいキー:enter image description here

リーあなたがまだ残っているか、誰かはs3Wrappers任意の提案や指導の一つを使用していますか?

更新#2: アレックスの助けを借りても、私はこれを動作させることができません。 getObjectLinkから受け取るリンクは無効で、getObjectはオブジェクトをダウンロードしません。私はこの記事https://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.htmlを見つけたenter image description here

それはかなり古く、S3ので、特に使用することを提案している:私は、私はこれを受けて、私は、追加情報があるかどうかを確認するためのputObjectメソッド

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

をしようと思いましたbucketnamesのドット私はもうそれ以上の関連性はありません。そこ私が間違っているの何かは明らかであるが、私はこれを解決しようと時間を費やしていると私はそれが何であるかを見つけ出すように見えることはできません。

+1

悪い命名は、(署名4バージョンを区別するために)これは2つのコンポーネントが必要です:?。。S3ラッパーとSV4ユーティリティをA)の保存[S3コンポーネント]( https://gist.gi thubusercontent.com/Leigh-/26993ed79c956c9309a9dfe40f1fce29/raw/da1caf605370705a7d258fcddbcb79994af60162/S3Wrapper.cfc)を「S3v4.cfc」、B)「The Signature 4 Utility」(https://gist.github.com/Leigh-/a2798584b79fd9072605a4cc7ff60df4#file- sv4util-cfc)を 'Sv4.cfc'(どちらもあなたの' com'ディレクトリにあります)として追加します。次に、38行目のCFCパスに 'com'を追加します。' variables.Sv4Util = createObject( 'component'、 'com.Sv4')。init(...); ' – Leigh

+0

..(続き)注意喚起!私は明日のことを修正します(もっと明白です)。 – Leigh

+0

問題はなんですか?関数呼び出しが期待する結果は何ですか? – Alex

答えて

0

私はあなたのコードが何をするかの荒廃を与える:

getObjectLinkは地域s3-us-west-1のバケツimgbkt.domain.comに探して発見されたファイルfake.pingのHTTP URLを返します。このリンクは一時的なもので、デフォルトで60秒後に終了します。

getObjectは、getObjectLinkを呼び出し、すぐにHTTP GETを使用してURLを要求します。応答はデフォルトでfake.pingというファイル名のS3v4.cfcのディレクトリに保存されます。最後に機能ダウンロードしたファイルのフルパスを返します。別の場所にファイルを保存するにはE:\wwwDevRoot\taa\fake.ping

を、あなたが呼び出します:

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

をHTTPリクエストがファイルを意味し、同期しているが、完全にダウンロードされます関数がファイルパスを返すとき。

あなたはファイルの実際のコンテンツにアクセスしたい場合は、この操作を行うことができます。

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); 

fileRead/fileReadBinaryはにファイル全体を読み込むので、あなたは、ファイルが大きい場合には、コンテンツをストリーミングする場合があります。バッファUse fileOpen to stream the content.

んあなたを助けること私の部分に

+0

私は元の質問に「更新#2」を追加しました。私はまだ何かが間違っていると思うし、putObjectを試した後、私はそれをサポートするためにさらに情報を得ています。 – Lance