不使用action="write"
,使用action="upload"
。
例子:
<cffile
action = "upload"
fileField = "ImageData"
destination = "/tmp/uploads"
accept = "image/jpg"
nameConflict = "MakeUnique"
/>
这会将文件放入/tmp/uploads
(例如d:/tmp/uploads
在 Windows 上使用) - 这是一个无法在线访问的目录。
此时,您必须验证该文件是否与它声称的相同 - 具有适当尺寸和文件大小的图像文件,而不是经过掩码的 EXE 或嵌入的 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和各种 CF 博客
上
有很多有价值的信息,值得花一些时间来消化。