fileExist() не распознает файлы, которые я ему предоставляю

У меня есть загрузка файла после отправки формы, и мне нужно удалить старый файл, который был там после завершения загрузки файла. Все работает исправно, отправка форм, загрузка файлов. Но Coldfusion вообще не может распознать старый файл. Либо командой fileExist(), либо собственно командой <cffile action="delete">. Между тем, пока я вывожу переменную, которую использую как для fileExist(), так и для удаления, прямо перед тем, как я нажму на эти строки, и я перейду к этому точному пути на моем ftp, и файл на самом деле там, до и после отправки формы. Загружаемые файлы не должны перезаписывать предыдущую фотографию, так как они называются совершенно по-другому и используется makeunique. Буду признателен за любую помощь.

Вот фрагмент кода, который у меня есть после отправки формы (в данный момент я пытаюсь заставить работать image1, но остальные 3 изображения отображают такое же поведение.

Эта строка выполняет <cfoutput>#variables.erase1#</cfoutput><br />, но не hello2:

<cfquery name="getPreviousImage" datasource="#Application.datasourceName#">
        SELECT 
            image1, image2, image3, image4
        FROM 
            testaCustomers
        WHERE 
            RecordID = <cfqueryparam value="#form.ID#" cfsqltype="CF_SQL_INTEGER" maxlength="50">

</cfquery> 

<cfset variables.oldImage1 = getPreviousImage.image1>
<cfset variables.oldImage2 = getPreviousImage.image2>
<cfset variables.oldImage3 = getPreviousImage.image3>
<cfset variables.oldImage4 = getPreviousImage.image4>

<cfset variables.image1 = getPreviousImage.image1>
<cfset variables.image2 = getPreviousImage.image2>
<cfset variables.image3 = getPreviousImage.image3>
<cfset variables.image4 = getPreviousImage.image4>

<cfif #form.image1# NEQ ""> 

    <cffile action="upload" destination="#Application.filePath#Pics/" filefield="image1" nameconflict="makeunique" result="upload1">

    <cfif isDefined ("upload1.serverFile")>
        <cfset variables.image1 = #upload1.serverFile#> 
    </cfif>

   <cfset variables.erase1 = Application.filePath & "Pics/" & variables.oldImage1>
   <cfoutput>#variables.erase1#</cfoutput><br />

    <cfif fileExists(variables.erase1)>
        hello2
        <cffile action="delete" file="#variables.erase1#">
    </cfif>
</cfif>

person d.lanza38    schedule 15.05.2012    source источник
comment
Что выводит #variables.erase1#? Абсолютный путь к файлу? Можете ли вы добавить это к вопросу?   -  person Nathan Strutz    schedule 16.05.2012
comment
Да, это абсолютный путь к файлу. Вот что выводит /var/www/testaproduce.com/Pics/Winter8.jpg   -  person d.lanza38    schedule 16.05.2012


Ответы (2)


Проверьте права доступа к файлам. У учетной записи, под которой запущена ваша служба приложений, может не быть прав на чтение файлов, к которым вы пытаетесь получить доступ. В противном случае ваш путь может быть неправильным.

person Josh Siok    schedule 15.05.2012
comment
Я изменил разрешения на 777. Он все еще не читает его как файл. Плюс загрузка работает нормально. - person d.lanza38; 16.05.2012
comment
В качестве шага по устранению неполадок вы можете использовать cfdirectory для получения содержимого #application.filePath#Pics/ . cfdump результаты и посмотрите, видит ли ColdFusion эти файлы. - person Josh Siok; 16.05.2012
comment
Я понял, отделка(). Мои записи вставлялись в базу данных с добавлением пробелов в конец. Я предполагаю, что html обрезает src= по умолчанию, а coldfusion — нет, потому что я видел изображения, отображаемые в браузере. - person d.lanza38; 16.05.2012
comment
Поскольку это была проблема с путем, не стесняйтесь отмечать ответ Джоша как ответ :) - person Leigh; 16.05.2012

Возможно, вам придется обернуть путь к изображению в функцию ExpandPath(), как вы сделали с Trim();

<cfif fileExists(ExpandPath(Trim(variables.erase1)))>
    ...code...
</cfif>

FileExists() ожидает физический путь, а не корневой веб-путь. ExpandPath() преобразует путь веб-сайта в физический путь (*nix и windows).

person Scott Jibben    schedule 16.05.2012