2013-04-26 110 views
0

我试图创建一个表单,用户在其中选择一个位置,然后用CFFILE ACTION ="UPLOAD"上传一个文档。我不擅长这一点,所以你可以提供任何帮助将不胜感激。文件上传正在执行多次

以下是我的代码。本质上,有一个文件夹位置的下拉列表。用户首先选择其中一个位置。然后点击'浏览'选择一个文件。最后他们点击提交和文件上传。

代码是#dir#是链接到每个位置名称的文件夹位置。目前发生的事情是,文档已成功上传...但它正在上传到所有文件夹位置,而不是从下拉列表中选择的位置。这里是我的代码:

docuploads.cfm

<cfquery name="getLocation"> 
    SELECT * 
    FROM Locations 
    ORDER BY FolderName 
</cfquery> 

<form action="docuploads.cfm" method="POST" enctype="multipart/form-data" name="upload_form" id="upload_form"> 
    <select name="folderID"> 
     <option value="">--- Select Folder ---</option> 
     <cfoutput query="getLocation"> 
      <option value="#FolderName#"">#FolderName#</option> 
     </cfoutput> 
    </select> 

    <cfoutput query="getLocation"> 
     <CFIF IsDefined("form.upload_now")> 
      <CFIF structKeyExists(form, "ul_path") and len(form["ul_path"])> 
      <CFFILE ACTION="UPLOAD" FILEFIELD="ul_path" 
        DESTINATION="C:\Documents\#dir#\"   
        NAMECONFLICT="OverWrite"> 
       <CFSET ClientFilePath = "#clientDirectory#\#clientFile#"> 
      </CFIF> 
     </CFIF> 
    </CFOUTPUT> 

    <br /><br /> 
    Click on the Browse button to select the file to Upload:<br> 
    <input type="file" name="ul_path" id="ul_path" style="height: 22px;width: 350px;" value=""><br><br> 
    <input type="submit" name="upload_now" id="upload_now" value="Submit" style="height: 22px;"> 
    <input type="button" name="clear" value="Clear" style="height: 22px;"> 
    <br /><br /><br /> 
</form> 

我希望这是有道理的 - 任何人都可以摆脱对得到这个工作任何光线?

+4

上传是'里面'这是一个循环,这就是为什么它上传到每一个位置。您需要将''拉出该块,并从用户的选择中指定##dir#'。 – imthepitts 2013-04-26 19:13:18

+0

如果这是完整的代码,那么循环是1问题,但未声明的变量将导致更多的错误。 – steve 2013-04-26 19:38:45

+0

这些变量*在* cffile范围内定义。请参见[评估未覆盖的变量](http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09af4-7fdf.html)。 @Jen - 也就是说,你应该确保范围避免无意的命名冲突。另外,您通常要使用'serverXXX'变量,即'cffile.serverFile','cffile.serverDirectory'(非客户端)。 – Leigh 2013-04-26 20:13:23

回答

0

我假设你没有发布完整的代码,因为你的#clientDirectory#/#clientFile#在你的代码中似乎没有源代码。

我把它看起来可能的样本放在一起。为了便于阅读,我还将您的上传例程从代码主体移至顶端。

<CFIF IsDefined("form.upload_now")> 
    <CFIF structKeyExists(form, "ul_path") and len(form["ul_path"])> 

     <!--- assuming you need to lookup info from the database ---> 
     <cfquery name="getThisLocation"> 
      SELECT FolderID, FolderName, dir 
      FROM Locations 
      where foldername=#form.folderid# 

     </cfquery>  


     <CFFILE ACTION="UPLOAD" FILEFIELD="ul_path" 
        DESTINATION="C:\Documents\#getThisLocation.dir#\"   
        NAMECONFLICT="OverWrite"> 

     <CFSET ClientFilePath = "#getThisLocation.clientDirectory#\##getThisLocation.clientFile#"> 

    </CFIF> 
</CFIF> 


<cfquery name="getLocation"> 
    SELECT * 
    FROM Locations 
    ORDER BY FolderName 
</cfquery> 

<form action="docuploads.cfm" method="POST" enctype="multipart/form-data" name="upload_form" id="upload_form"> 

<CFIF IsDefined("form.upload_now")> 
    <CFIF structKeyExists(form, "ul_path") and len(form["ul_path"])> 
    <P>FILE UPLOADED</P> 
    </CFIF> 
</CFIF> 

    <select name="folderID"> 
     <option value="">--- Select Folder ---</option> 
     <cfoutput query="getLocation"> 
      <option value="#FolderName#"">#FolderName#</option> 
     </cfoutput> 
    </select> 



    <br /><br /> 
    Click on the Browse button to select the file to Upload:<br> 
    <input type="file" name="ul_path" id="ul_path" style="height: 22px;width: 350px;" value=""><br><br> 
    <input type="submit" name="upload_now" id="upload_now" value="Submit" style="height: 22px;"> 
    <input type="button" name="clear" value="Clear" style="height: 22px;"> 
    <br /><br /><br /> 
</form> 

我还添加了一段代码让用户知道文件已上传。

+0

嗨史蒂夫 - 你提供的代码非常有帮助。谢谢!这个问题似乎与 - 其中foldername =#form.foldername# - 因为我得到未定义的错误。当我将它定义为 - \t 它仍然没有帮助。 当我改变它时,页面可以正常工作,但文档只能上传到第一个选择 - 当我选择其他位置之一时,没有骰子。 :( – Jen 2013-04-30 15:56:30

+0

试试这个:将您的选择框从folderID重命名为foldername。是否存储您的路径?我的印象是您的folderID值是数据库表中的主键值,列出了其中的路径。这就是为什么我在顶部查询的原因,我认为你需要查找你的路径,如果你在folderid中存储完整的路径,那么你可以参考它。 – steve 2013-04-30 16:28:45

+0

在我的数据库中我有FolderID(主键),文件夹名称(名称),目录(路径例如/ alldocs/training /) 我猜这只是无法完成。我仍然收到 - Element READTITLE在FORM中未定义。 在 26时发生错误:SELECT * 27:读取自 28:其中foldername =#form.folderName# – Jen 2013-04-30 17:55:56

-1

请试试这个:

<CFIF IsDefined("form.upload_now")> 
     <CFIF structKeyExists(form, "ul_path") and len(form["ul_path"])> 
     <CFFILE ACTION="UPLOAD" FILEFIELD="#form.ul_path#" 
       DESTINATION="C:\Documents\#dir#\"   
       NAMECONFLICT="OverWrite"> 
      <CFSET ClientFilePath = "#clientDirectory#\#clientFile#"> 
     </CFIF> 
     <cfoutput>file uploaded successfully</cfoutput> 
    </CFIF> 

<cfquery name="getLocation"> 
    SELECT * 
    FROM Locations 
    ORDER BY FolderName 
</cfquery> 

<form action="docuploads.cfm" method="POST" enctype="multipart/form-data" name="upload_form" id="upload_form"> 
    <select name="folderID"> 
    <option value="">--- Select Folder ---</option> 
    <cfoutput query="getLocation"> 
     <option value="#FolderName#"">#FolderName#</option> 
    </cfoutput> 
</select> 

    <br /><br /> 
Click on the Browse button to select the file to Upload:<br> 
<input type="file" name="ul_path" id="ul_path" style="height: 22px;width: 350px;" value=""><br><br> 
<input type="submit" name="upload_now" id="upload_now" value="Submit" style="height: 22px;"> 
<input type="button" name="clear" value="Clear" style="height: 22px;"> 
<br /><br /><br /> 

+0

你好!非常感谢你的回应。如果手动输入目标路径,但代码不会从数据库中获取路径,代码将很有用。嗯!再次感谢你! – Jen 2013-04-30 14:44:15