使用Leigh版本的S3Wrapper.cfc无法通过Init

Lan*_*nce 7 coldfusion amazon-s3 lucee

我是S3的新手,需要将它用于图像存储.我找到了半打版本的s2wrapper用于cf,但似乎v4的唯一一套是由Leigh修改的一套

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

放在com目录中并创建一个包含以下代码的"测试"页面:

s3 = createObject('component','com.S3Wrapper').init(application.s3.AccessKeyId,application.s3.SecretAccessKey);
Run Code Online (Sandbox Code Playgroud)

但得到以下错误: 在此输入图像描述

所以我改变了第37行

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

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

现在我得到:在此输入图像描述

我觉得要通过Leigh代码并开始改变事情是一个坏主意,因为我在这里潜伏了一年,知道Leigh的代码是可靠的.

有没有人知道是否有任何关于如何在任何地方使用它的例子?如果不是我做错了什么.如果它有所作为我使用的是Lucee 5而不是Adobe的CF引擎.

更新:

我按照Leigh的指示,错误现在消失了.我在我的测试页面添加了更多代码,现在看起来像这样:

<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>
Run Code Online (Sandbox Code Playgroud)

无论我为桶,obj或地区投入什么,我得到:在此输入图像描述

JIC我确实去了AWS并获得了新的密钥:在此输入图像描述

Leigh如果你还在附近或者有人如何使用s3Wrappers中的任何一个建议或指导?

更新#2: 即使在Alex的帮助下,我也无法让这个工作.我从getObjectLink收到的链接无效,getObject从不下载对象.我以为我会尝试putObject方法

test3 = s3.putObject(bucketName=bucket,regionName=region,keyName="favicon.ico");
writeDump(test3);
Run Code Online (Sandbox Code Playgroud)

为了查看是否有任何其他信息,我收到了:在此输入图像描述

我确实找到了这篇文章https://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html但它很老了,因为S3特别建议在桶名中使用点我不是这样的是相关的.显然我做错了,但我花了好几个小时试图解决这个问题,我似乎无法弄清楚它可能是什么.

Ale*_*lex 1

我将向您简要介绍该代码的作用:

getObjectLink返回在Regionfake.ping存储桶中查找的文件的 HTTP URL 。该链接是临时的,默认在 60 秒后过期。imgbkt.domain.coms3-us-west-1

getObject使用 HTTP GET 调用并立即请求getObjectLinkURL。默认情况下,响应将保存到该S3v4.cfc文件名的目录中fake.ping。最后该函数返回下载文件的完整路径:E:\wwwDevRoot\taa\fake.ping

要将文件保存在不同的位置,您可以调用:

downloadPath = 'E:\';
test = s3.getObject(bucket,obj,region,downloadPath);
writeDump(test);
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

(如果文件很大,您可能想要流式传输内容,因为fileRead/fileReadBinary将整个文件读入缓冲区。用于fileOpen流式传输内容。

这对你有帮助吗?