請勿使用action="write"
,請使用action="upload"
。
例子:
<cffile
action = "upload"
fileField = "ImageData"
destination = "/tmp/uploads"
accept = "image/jpg"
nameConflict = "MakeUnique"
/>
這將文件放在/tmp/uploads
(使用例如d:/tmp/uploads
在Windows上) - 這是一個目錄不在線訪問。
此時,您必須驗證該文件是它自稱的文件 - 具有適當尺寸和文件大小的圖像文件,而不是被屏蔽的EXE或embedded ZIP。
一旦你很高興這個文件可以安全的存放在你的服務器上,你可以將它移動到合適的目錄並將其名稱設置爲所選內容。
喜歡的東西...
<cfif cffile.FileWasSaved>
<cfset UploadedFileName = cffile.ServerDirectory & '/' & cffile.ServerFile />
<cfif NOT IsImageFile(UploadedFileName)>
<cfthrow message="Uploaded file not an image." />
</cfif>
<!--- INFO: Checks if zip embedded in image. --->
<cftry>
<cfzip action="list" file="#UploadedFileName#" name="tmp"/>
<cfthrow message="Embedded zip files not allowed."/>
<!--- TODO: Verify correct exception type for CF: --->
<cfcatch type="java.util.zip.zipexception"></cfcatch>
</cftry>
<!---
TODO: Validate any necessary business rules
(e.g. image not too large, etc)
--->
<cfelse>
<cfthrow message="File Upload Error"/>
</cfif>
<cfif refind('\W',Form.Name)>
<cfthrow message="Invalid Name specified. Only alphanumerics allowed."/>
</cfif>
<cfif NOT ListFindNoCase('PNG,JPG,GIF',Form.ImageType)>
<cfthrow message="Invalid FileType specified. Must be PNG/JPG/GIF"/></cfif>
</cfif>
<cffile
action = "rename"
source = "#UploadedFileName#"
destination = "#sitepath#storage/bannerImages/#Form.Name#.#Form.ImageType#"
/>
該代碼是未經測試,和 - 與所有你的服務器上運行,但尤其如此代碼涉及客戶端上傳 - 確保你明白它是什麼之前做使用它。
關於Adobe LiveDocs和various CF blogs有很多有價值的信息值得花費一些時間消化。
您是否將數據視爲文本而不是二進制文件? – phoebus 2009-10-25 00:29:33
我不知道你的意思。正在上傳的文件正在從表單傳遞。我沒有對結構中包含在變量中的數據進行處理。 – 2009-10-25 00:36:22
您需要使用「上傳」二進制文件來上傳它們,而不是「寫入」。 – phoebus 2009-10-25 01:17:48