ColdFusion ImageWrite到Amazon S3
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ColdFusion ImageWrite到Amazon S3相关的知识,希望对你有一定的参考价值。
这是一个奇怪的问题 - 我在2页上有“几乎”相同的代码,它可以在一个页面上运行,但在另一个页面上运行。令人难以置信的无用错误消息“S3错误消息”。没有说明我出错的地方。
下面的代码在两个页面上是相同的 - 两个页面之间的唯一(非常轻微)差异是生成imgLink的方式 - 在工作页面上它是从单个源(XML提要)和cfset获得的,在非 - 工作页imgLink最初设置为'none',然后检查一些源,直到它找到一个 - 它仍然以相同的方式cfset,并且我有一个cfif以确保它在处理之前有效。但是 - 我也试过硬编码源(即粘贴通常在imgLink cfset中的值),但它仍然失败。
我已经用最后一天可能想到的各种方式调试了这个,没有成功。所以,我想我正在寻找关于我应该注意什么可能导致它失败的指针。
返回的完整错误是 -
在文件s3上执行文件操作创建时发生错误://mybucket/1577-67BC4EF7-1B21-866F-32E95DF67F3336C6-f.jpg。此异常的原因是:org.apache.commons.vfs.FileSystemException:带有代码“S3错误消息”的未知消息。
我的代码是;
<cfscript>
this.name ="Object Operations";
this.s3.accessKeyId = "accessKey";
this.s3.awsSecretKey = "secretKey";
this.s3.defaultLocation="EU";
</cfscript>
<!--- CFImage Stuff --->
<!--- S3 Permissions --->
<cfset perms = [{group="all", permission="read"}]>
<!--- Create the Images ---->
<cfset imageuuid = '#CreateUUID()#'>
<cfset imagefull = '#getid.id#-#imageuuid#-f.jpg'>
<cfset imagemain = '#getid.id#-#imageuuid#-m.jpg'>
<cfset imagethumb = '#getid.id#-#imageuuid#-t.jpg'>
<cfimage action="read" name="img1" source="#imgLink#">
<!--- Create the full size image 505 x N --->
<cfif img1.height GT img1.width>
<cfif img1.width GTE 505>
<cfset ImageResize(img1,'505','')>
</cfif>
<cfelseif img1.width GT img1.height>
<cfif img1.width GTE 505>
<cfset ImageResize(img1, '505','')>
</cfif>
</cfif>
<cfset ImageWrite(img1, "s3://mybucket/#imagefull#")>
<cfset StoreSetACL("s3://mybucket/#imagefull#","#perms#")>
<!--- Create the main size image 251 x N --->
<cfif img1.height GT img1.width>
<cfif img1.width GTE 251>
<cfset ImageResize(img1,'251','')>
</cfif>
<cfelseif img1.width GT img1.height>
<cfif img1.width GTE 251>
<cfset ImageResize(img1, '251','')>
</cfif>
</cfif>
<cfset ImageWrite(img1, "s3://mybucket/#imagemain#")>
<cfset StoreSetACL("s3://mybucket/#imagemain#","#perms#")>
<!--- Create the thumbnail 52 x 52 --->
<!--- resize image to 52 pixels tall if width is greater then height --->
<cfif img1.height GT img1.width>
<cfset ImageResize(img1,'52','')>
<cfset fromX = img1.Height / 2 - 26>
<cfset ImageCrop(img1,0,fromX,52,52)>
<!--- resize image to 75 pixels wide if height is greater then width --->
<cfelseif img1.width GT img1.height>
<cfset ImageResize(img1,'','52')>
<cfset fromY = img1.Width / 2 - 26>
<cfset ImageCrop(img1,fromY,0,52,52)>
<cfelse>
<cfset ImageResize(img1,'','52')>
<cfset ImageCrop(img1,0,0,52,52)>
</cfif>
<cfset ImageWrite(img1, "s3://mybucket/#imagethumb#")>
<cfset StoreSetACL("s3://mybucket/#imagethumb#","#perms#")>
刚刚意识到我没有添加我的解决方案,所以这里是 - '非工作'代码所在的文件夹有自己的Application.cfc,它不包含上面发布的代码中的S3元素。 “工作”代码在相应的Application.cfc中确实具有该功能。
不太确定为什么必须在Application.cfc中才能使用它
application.cfc中的this
对象是一个application
组件,ColdFusion页面上的this
只是一个结构变量。将<cfdump var=#this#>
放在两个地方,application.cfc和yourfile.cfm,以查看差异。
以上是关于ColdFusion ImageWrite到Amazon S3的主要内容,如果未能解决你的问题,请参考以下文章