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)
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特别建议在桶名中使用点我不是这样的是相关的.显然我做错了,但我花了好几个小时试图解决这个问题,我似乎无法弄清楚它可能是什么.
我将向您简要介绍该代码的作用:
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流式传输内容。
这对你有帮助吗?