ユーザーが 4 つの画像とその他のフィールドでページを更新できるページがあります。ファイル入力ごとにアップロードされた画像が既にあり、新しい画像をアップロードするときに、新しい画像を取得してアップロードし、アップロードが成功した場合は古い画像を削除します。ただし、このエラーが発生しています。
File /var/www/mywebsite.com/Pics/Sunset3.jpg specified in action delete does not exist.
私のftpによると、ファイルはそのディレクトリに存在します。これらのファイルは、フォームの一部としてページに表示され、ユーザーがどの画像が既に存在するかを参照できます。同じページでファイルのアップロードを処理できず、セカンダリ ファイルを使用する必要があると聞いたことがありますが、これらの画像はページへの前回のアクセス時にアップロードされているため、アップロードされず、同じページで処理されますページ。
これが私が持っているコードです。変数 tableName は正しく、コードの前半で定義されています。また、データベースはアップロードの試行後に正しい値を反映し、削除時に壊れるだけです。
<cfquery name="getPreviousImage" datasource="#Application.datasourceName#">
SELECT
image1, image2, image3, image4
FROM
#tableName#
WHERE
RecordID = '#form.ID#'
</cfquery>
<cfset oldImage1 = getPreviousImage.image1>
<cfset oldImage2 = getPreviousImage.image2>
<cfset oldImage3 = getPreviousImage.image3>
<cfset oldImage4 = getPreviousImage.image4>
<cfset image1 = getPreviousImage.image1>
<cfset image2 = getPreviousImage.image2>
<cfset image3 = getPreviousImage.image3>
<cfset image4 = getPreviousImage.image4>
<cfif #form.image1# NEQ "">
<cffile action="upload" destination="#Application.filePath#Pics/" filefield="image1" nameconflict="makeunique">
<cfif isDefined ("cffile.serverFile")>
<cfset image1Place = #cffile.serverFile#>
</cfif>
<cfif #getPreviousImage.image1# NEQ "" AND #image1Place# NEQ "">
<cffile action="delete" file="#Application.filePath#Pics/#oldImage1#">
</cfif>
</cfif>
<cfif #form.image2# NEQ "">
<cffile action="upload" destination="#Application.filePath#Pics/" filefield="image2" nameconflict="makeunique">
<cfif isDefined ("cffile.serverFile")>
<cfset image2Place = #cffile.serverFile#>
</cfif>
<cfif #getPreviousImage.image2# NEQ "" AND #image2Place# NEQ "">
<cffile action="delete" file="#Application.filePath#Pics/#oldImage2#">
</cfif>
</cfif>
<cfif #form.image3# NEQ "">
<cffile action="upload" destination="#Application.filePath#Pics/" filefield="image3" nameconflict="makeunique">
<cfif isDefined ("cffile.serverFile")>
<cfset image3Place = #cffile.serverFile#>
</cfif>
<cfif #getPreviousImage.image3# NEQ "" AND #image3Place# NEQ "">
<cffile action="delete" file="#Application.filePath#Pics/#oldImage3#">
</cfif>
</cfif>
<cfif #form.image4# NEQ "">
<cffile action="upload" destination="#Application.filePath#Pics/" filefield="image4" nameconflict="makeunique">
<cfif isDefined ("cffile.serverFile")>
<cfset image4Place = #cffile.serverFile#>
</cfif>
<cfif #getPreviousImage.image4# NEQ "" AND #image4Place# NEQ "">
<cffile action="delete" file="#Application.filePath#Pics/#oldImage4#">
</cfif>
</cfif>
<cfquery name="UpdateInfo" datasource="#Application.datasourceName#">
UPDATE
#tableName#
SET
title = <cfqueryparam value="#form.title#" cfsqltype="CF_SQL_VARCHAR" maxlength="250">,
<cfif #image1Place# NEQ "">
image1 = <cfqueryparam value="#image1Place#" cfsqltype="CF_SQL_VARCHAR" maxlength="250">,
</cfif>
<cfif #image2Place# NEQ "">
image2 = <cfqueryparam value="#image2Place#" cfsqltype="CF_SQL_VARCHAR" maxlength="250">,
</cfif>
<cfif #image3Place# NEQ "">
image3 = <cfqueryparam value="#image3Place#" cfsqltype="CF_SQL_VARCHAR" maxlength="250">,
</cfif>
<cfif #image4Place# NEQ "">
image4 = <cfqueryparam value="#image4Place#" cfsqltype="CF_SQL_VARCHAR" maxlength="250">,
</cfif>
body = <cfqueryparam value="#form.body#" cfsqltype="CF_SQL_VARCHAR">
WHERE RecordID = <cfqueryparam value="#form.ID#" cfsqltype="CF_SQL_INTEGER" maxlength="50">
</cfquery>
編集:これは、fileExist() を実装した後の新しいエラーです。また、これらすべての画像がサーバー上に構築されているのがわかります。他の写真の中ではsunset10.jpgくらいまでです。この fileExist を機能させた場合、エラーが表示されないようにするだけではなく、削除が実行されません。もちろん、間違った場所を指していない限り、これらのファイルは確実に存在するためです。
Invalid CFML construct found on line 107 at column 138.
ColdFusion was looking at the following text:
>
The CFML compiler was processing:
An expression beginning with #, on line 107, column 23.This message is usually caused by a problem in the expressions structure.
A cfif tag beginning on line 107, column 18.
A cfif tag beginning on line 107, column 18.
A cfif tag beginning on line 107, column 18.
残念ながら、堅牢な例外レポートをオンにすることはできません。また、このエラーは、最初にページに移動したときに表示されます。フォームを送信する前に。一方、このコードは、フォームが入力された後にのみ実行される if 内にあります。