私は実行Coldfusion8
していて、画像処理を処理する cfc を持っています。
外部ソースから画像を取得し、それらを一時ストレージに入れ、サイズを変更して S3 に保存する場合、cfc は正常に動作します。この cfc を介して手動アップロードから新しい画像セットを実行しようとしましたが、突然エラーが発生しました。
まず、画像を取得して一時ディレクトリに保存し、img_handler を呼び出します。
<cffile result="temp" action="upload" accept="image/jpeg,image/jpg" filefield="Dateiname8" destination="#variables.tempDirectory#" nameconflict="overwrite" />
<cfset variables.testFilePath = variables.tempDirectory & temp.serverFile>
<!--- catch CMYK --->
<cfimage action="info" source="#variables.testFilePath#" structname="cmyk" />
<cfif cmyk.colormodel.colorspace EQ "Any of the family of CMYK color spaces">
<cfthrow type="FileNotFound" message="#tx_settings_icons_error_cymk#" />
</cfif>
<cfif structKeyExists( cookie, "resolution")>
<cfset variables.screenWidth = cookie.resolution>
<cfelse>
<cfset variables.screenWidth = "na">
</cfif>
<!--- call image handler --->
<cfinvoke component="services.form_img_handler" method="upload" returnVariable="variables.worked">
<cfinvokeargument name="cm" value="upload_background" />
<cfinvokeargument name="pt" value="#variables.tempDirectory#" />
<cfinvokeargument name="fl" value="#temp.serverFile#" />
<cfinvokeargument name="se" value="#form.app_basic_id#" />
<cfinvokeargument name="ar" value="background" />
<cfinvokeargument name="ck" value="#variables.screenWidth#" />
<cfinvokeargument name="gb" value="" />
<cfinvokeargument name="ax" value="int" />
<cfinvokeargument name="al" value="#variables.allow#" />
</cfinvoke>
これで問題なく動作します。イメージが作成され、temp
一時フォルダーに保存されます。私の問題は、次のように image_handler で画像を読み取ろうとするときです。
<cfhttp timeout="500"
throwonerror="no"
url="#LOCAL.tempDirectory##LOCAL.imgFile#"
method="get"
useragent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12"
getasbinary="yes"
result="LOCAL.objGet">
これにより、次のエラーが発生します。
catch - struct
Charset: [empty string]
ErrorDetail: I/O Exception: For input string: "\website\test\mem\secure\Innentitel.jpg"
Filecontent: Connection Failure
Header: [empty string]
Mimetype: Unable to determine MIME type of file.
Responseheader:
[struct]
Statuscode: Connection Failure. Status code unavailable.
Text: YES
ここで何が起こっているのか、私にはほとんどわかりません。
質問
アプリケーションは SSL で実行されていますが、最初のステップで画像を取得して一時ディレクトリに保存できたのに、cfc から再びそこから取り込めないのはなぜですか。access="remote"
この機能をWebサービスとしても呼び出しているため、アップロード機能が問題になる可能性がありますか? remote
もしそうなら、関数がとregular
要求の両方を処理するようにするにはどうすればよいですか?
手伝ってくれてありがとう!
編集:
明確にするためにcfinvoke
、最初のコード ブロックでは、Amazon S3 へのすべての画像アップロードを処理するために私の cfc を呼び出します。この cfc 内cfhttp
で、問題の呼び出しを行っています。を使用して現在行っている方法は次cfimage
のとおりです。これにより、cfc を呼び出す前にすべての検証を行う必要があります。
<cfcomponent output="false" hint="image handler - s3 manager">
<cffunction name="Init" access="public" returntype="any" output="false" hint="Initialize">
<cfreturn true />
</cffunction>
<!--- this is the function I'm calling --->
<cffunction name="upload" access="remote" output="false" hint="creates images and stores them to S3">
<cfargument name="cm" type="string" required="true" hint="original form submitted" />
<cfargument name="pt" type="string" required="true" hint="img path" />
<cfargument name="fl" type="string" required="true" hint="img filename" />
<cfargument name="se" type="string" required="true" hint="user id" />
<cfargument name="ar" type="string" required="true" hint="item id" />
<cfargument name="ck" type="string" required="true" hint="screen width" />
<cfargument name="gb" type="string" required="true" hint="item to send back something" />
<cfargument name="ax" type="string" required="true" hint="remote call y/n" />
<cfargument name="al" type="string" required="true" hint="allowed formats or def(ault)" />
<!--- lot of setters --->
<cfscript>
var LOCAL = {};
// arguments
LOCAL.command = cm;
LOCAL.imgPath = pt;
LOCAL.imgFile = fl;
LOCAL.sellerILN = se;
LOCAL.article = ar;
LOCAL.cookie = LSParseNumber(ck);
LOCAL.getBack = gb;
LOCAL.access = ax;
LOCAL.allow = al;
// command
if ( LOCAL.command NEQ "" ) {
LOCAL.action = LOCAL.command;
} else {
LOCAL.action = "upload";
}
// allow
if ( LOCAL.allow EQ "def" ){
LOCAL.allow = "png,jpg,jpeg";
}
// s3 misc
LOCAL.letter = "";
LOCAL.objGet = "";
LOCAL.bucketPath = Session.bucketPath;
LOCAL.bucketName = Session.bucketName;
LOCAL.acl = "public-read";
LOCAL.storage = "";
LOCAL.tempDirectory = expandPath( "../somewhere/secure/" );
LOCAL.failedLoads = "";
LOCAL.altFailedLoads = "";
LOCAL.createBucket = "false";
LOCAL.errorCount = 0;
LOCAL.altErrorCount = 0;
LOCAL.cacheControl = 1;
LOCAL.contentType = "image";
LOCAL.httptimeout = "300";
LOCAL.cacheDays = "30";
LOCAL.storageClass = "REDUCED_REDUNDANCY";
LOCAL.keyName = "";
LOCAL.baseUrl = "http://www.page.com";
LOCAL.imageSrc = "";
LOCAL.testFilePath = LOCAL.imgPath & LOCAL.imgFile;
LOCAL.fileExt = ListLast(LOCAL.imgFile, ".");
LOCAL.runner = "";
LOCAL.worked = "true";
LOCAL.or = "";
LOCAL.tag = "";
// background dimes - seldomly used, so declare here
if ( LOCAL.command EQ "upload_background") {
LOCAL.dims.backW = structNew();
LOCAL.dims.backW.s = 640;
LOCAL.dims.backW.m = 800;
LOCAL.dims.backW.l = 1024;
LOCAL.dims.backW.xl = 2048;
LOCAL.dims.backH = structNew();
LOCAL.dims.backH.s = 480;
LOCAL.dims.backH.m = 600;
LOCAL.dims.backH.l = 748;
LOCAL.dims.backH.xl = 1496;
}
</cfscript>
<!--- create up to 4 versions of each image and store to S3 --->
<cftry>
<cfif LOCAL.command EQ "upload_search">
<cfif LOCAL.cookie LT 320 >
<cfset LOCAL.runner = "l,s">
<cfelseif LOCAL.cookie GTE 320 AND LOCAL.cookie LTE 767>
<cfset LOCAL.runner = "l,m">
<cfelseif LOCAL.cookie GT 768 AND LOCAL.cookie LTE 1279>
<cfset LOCAL.runner = "xl,m">
<cfelseif LOCAL.cookie GT 1280>
<cfset LOCAL.runner = "xl,l">
</cfif>
<cfelseif LOCAL.command EQ "upload_import" OR LOCAL.command EQ "upload_background" OR LOCAL.command EQ "remove_background">
<cfset LOCAL.runner = "xl,l,m,s">
</cfif>
<!--- get image --->
<cfimage action="read" name="LOCAL.objGet" source="#LOCAL.tempDirectory##LOCAL.imgFile#">
<!--- I/O Exception: peer not authenticated...
<cfhttp timeout="500"
throwonerror="no"
url="https://www.website.com/test/mem/img/secure/#LOCAL.imgFile#"
method="get"
useragent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12"
getasbinary="yes"
result="LOCAL.objGet">
--->
cfimage
そのため、一時フォルダーから画像を取得するために使用していますcfhttp
。呼び出しの後にイメージ検証ルーチンがありましたcfhttp
が、これを cfc 呼び出しの外に移動しました。これがより優れているかどうかはわかりませんが、少なくとも現在は機能しています。