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的主要内容,如果未能解决你的问题,请参考以下文章

将非 .NET DLL 添加到 ColdFusion

JavaScript 数组到 ColdFusion

Coldfusion插件在Sublime文本中

div元素到coldfusion变量

Coldfusion 将数据循环到多列和多行

使用 ColdFusion 将文件上传到 Google Drive