Почему CFHTTP возвращает исключение ввода-вывода для пути к файлу при попытке загрузить изображение в Coldfusion?

Я бегу Coldfusion8 и иметь CFC, который обрабатывает обработку изображений.

Cfc работает нормально, когда извлекает изображения из внешних источников, помещает их во временное хранилище, изменяет размеры и сохраняет в S3. Теперь я попытался запустить новый набор изображений из ручной загрузки через этот 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" как я также называю эту функцию как веб-сервис? Если так, что я могу сделать, чтобы моя функция управляла обоими remote а также regular Запросы?

Спасибо за помощь!

РЕДАКТИРОВАТЬ:
Чтобы уточнить, cfinvoke в первом блоке кода вызывается my cfc для обработки всех загрузок изображений в Amazon S3. Внутри этого я делаю 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. Не уверен, что это лучше / умнее, но по крайней мере это работает сейчас.

1 ответ

cfhttp требует полных URL с протоколом. Беглый взгляд на сообщения об ошибках ErrorDetail: I/O Exception: For input string: "\website\test\mem\secure\Innentitel.jpg",

Если вы преобразуете его в URL с протоколом, это работает?

Другие вопросы по тегам