上传文件,重命名并使用Coldfusion将其放置在服务器上的特定位置

时间:2011-10-07 14:47:06

标签: coldfusion

用户从前端HTML表单提交文件,该表单包含分部,部门名称,部门编号,部门编号,年份,电子邮件,电话等字段。正在提交的文件可能具有用户指定的名称。但是,当它上传时,我希望它被命名为Departmentname_departmentnumber_sectionnumber

因此,如果部门为Accounting,部门编号为123且部分为1,则文件名称为Accounting_123_1.doc。扩展名将是提交的任何类型的文件(文本,MS-Word的.doc或.docx,PDF或RTF),用户可以上传扩展名为.txt,.doc,.docx,pdf,rtf的文件附件。

另外,我希望它存储在服务器上的特定位置。因此,如果部门是公司财务,年份是2011-2012,则应将其存储在"E:\Files Submitted\2011-2012\Corporate Finance\"的服务器上。 "E:\Files Submitted\"部分在目录名称中保持相同。

<cfset submittedfileName = #form.departmentname#&"_"&#form.departmentnumber#&"_"&#form.section_number_1#&"."&#cffile.ClientFileExt#>
<cfset filedirectoryYear = "E:\Files Submitted\"&#form.current_year#&"\"&#form.division#&"\">

<!--- ensure that the user uploads attachments of type with extension .txt, .doc, .docx, pdf, rtf only--->
<cfif FORM.attachment_1 neq "">          
  <cffile action="upload" 
    accept="text/plain,application/msword,application/pdf,application/rtf"        
    filefield="attachment_1"
    destination="E:\temp\uploads"
    nameconflict="Makeunique" 
  >

  <!--- rename the file and move it to permanent destination --->         
  <cffile action="rename" 
    source="E:\temp\uploads\#cffile.serverFileName#" 
    destination=#filedirectoryYear#&#submittedfileName#&#cffile.ClientFileExt#
  >

  <!--- now create a temporary variable for the attachment so that it can be emailed later on --->
  <cfset attachment_local_file_1 = #filedirectoryYear#&#submittedfileName#&#cffile.ClientFileExt#>            
</cfif>

我使用了cffile.ClientFileExt,因为文件是在没有扩展程序的情况下上传的,但我在destination=#filedirectoryYear#&#submittedfileName#&#cffile.ClientFileExt#收到错误

"multiple items at this position: Missing Token > or />

我正在使用Coldfusion 8.任何建议都会在我错误的地方以及如何解决它时受到赞赏。

1 个答案:

答案 0 :(得分:4)

问题在于代码中的&。试试这个

<cffile 
  action="rename" 
  source="E:\temp\uploads\#cffile.serverFileName#" 
  destination="#filedirectoryYear##submittedfileName##cffile.ClientFileExt#"
>

ColdFusion中的字符串连接要么通过变量插值发生

<cfset foo = "FixedString_#variable#_FixedString">

或作为表达

<cfset foo = "FixedString" & variable & "FixedString">

不要混淆两者。