0

我有一个小页面,其中有一个包含几个字段的表单。还包括文件上传功能。提交表单时,我需要能够将要上传的文件的文件名插入到“sURL”字段中。(可以使用此文件名自动填充 sURL 字段,如果它是外部 URL,也可以手动输入)。我看过其他有这个问题的人,似乎没有直接的解决方法?有没有人能解释一下?

<html><head>    
<title>New Survey Entry</title>
</head>
<body>

<script language="JavaScript" type="text/javascript">
function check ( form )
{
  if (form.ul_path.value == "") {
    alert( "Please select the file to upload." );
    form.ul_path.focus();
    return false ;
  }
  return true ;
}

</script>

<CFIF NOT isDefined("dir")>
    <CFSET dir = "">
</CFIF>

<CFIF NOT isDefined("clientFile")>
    <CFSET clientFile = "">
</CFIF>

<CFQUERY NAME="getpub" DATASOURCE="testpage" DBTYPE="ODBC">
    SELECT *
    FROM surveypubs
    ORDER BY sGroup asc
</CFQUERY>
<h2><center>NEW SURVEY ENTRY</center></h2>
<table cellpadding="3" cellspacing="3" class="font13">
<cfoutput>
    <form name="input" enctype="multipart/form-data" action="index.cfml?cat=test&page=insertSurvey" method="post">
    <tr>
        <td valign="middle" align="left"><b>Year:</b></td>
        <td colspan="3"><input name="sYear" type="text" size="8" value="<CFOUTPUT>#year(now())#</CFOUTPUT>"><input name="sYear_required" type="hidden" value="You must enter a Year."></td>
    </tr>
    </cfoutput>
    <tr>
        <td valign="middle" align="left"><b>Group:</b></td>
        <td colspan="3"> <select name="sGroup">
<option value="">--- Select One ---</option>
<cfoutput query="getpub"><option value="#sGroup#">#sGroup#</option></cfoutput>
</select> <br> Don't see the Survey Group?  Click <a href="/index.cfml?cat=test&page=inputgroup" target="_blank">here</a> to add.

      </td>

</div><br><br>
    </tr>

    <tr>
        <td valign="middle" align="left"><b>Title:</b></td>
        <td colspan="3"><input name="sTitle" type="text" size="85"><input name="sTitle_required" type="hidden" value="You must enter a Title."></td>
    </tr>

    <tr>
        <td valign="middle" align="left"><b>Comment:</b></td>
        <td colspan="3"><input name="sComment" type="text" size="85"></td>
    </tr>

    <tr>
        <td valign="middle" align="left"><b>URL:</b></td>
        <td colspan="3"><input name="sURL" type="text" size="85"></td>
    </tr>

        <td valign="bottom" align="left"><b>URL Type:</b></td>
        <td colspan="3">
        <input type="radio" name="surlType" value="0" checked> Internal &nbsp;&nbsp;&nbsp;<input type="radio" name="surlType" value="1"> External</td>
    </tr>

<cfoutput>  
<input name="dateAdded" type="hidden" value="#dateformat(now(),"mm-dd-yyyy")#">
</cfoutput>                 
    <tr>
      <td></td>
      <form action="/index.cfml?cat=test&page=inputSurvey" method="POST" enctype="multipart/form-data" name="upload_form" id="upload_form" onsubmit="return check(this);">

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

        <CFFILE ACTION="UPLOAD" FILEFIELD="ul_path" DESTINATION="D:\testpage\docs\" NAMECONFLICT="OverWrite">
        <CFSET ClientFilePath = "#clientDirectory#\#clientFile#">
</CFIF>

      <td colspan="3" align="left">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=""></td>
  </tr>
    <tr>
        <td></td>
        <td colspan="3" align="center"><input type="submit" name="submit" value="Submit">&nbsp;&nbsp;<input name="clear" value="Clear" type="reset">&nbsp;&nbsp;<input type="button" name="back" value="Back" class="input" onClick="javascript:history.back();"></td>
    </tr>
    </table>

    </form>

<cfif isDefined("CFFILE.ClientFile")>
    <cfset form.sURL = "#CFFILE.ClientFile#">
<cfelse>
     <cfset form.sURL = "null">
 </cfif>

<cfoutput><input type="hidden" name="sURL" id="sURL" value="http://testpage.com/docs/#ClientFile#"/></cfoutput> 
 </form>      
</body>
    </html>
4

2 回答 2

2

使用 的result属性cffile,这将为您提供有关上传的数据结构,包括文件存储的目录以及文件名。添加result='moo'到您的cffile通话中,然后执行 acfdumpmoo查看所有数据。

查看此链接以获取有关返回内容的更多信息result

于 2013-09-05T13:19:36.893 回答
1

我感觉到您正在尝试做的事情并没有在这里得到回答。您似乎正在尝试做的是在文件上传之前在客户端上。您希望收集用户从他或她的文件系统中选择的文件的名称,并使用 JS 填充一些其他表单字段 - 其中可能包含文件名称或可能包含一些 URL 值或用户提供的其他内容。

这与在提交表单后收集表单名称不同,因为它违反了浏览器保护。我真的认为 JS 对此有足够的解决方案。您可能会找到适用于某些浏览器的解决方案,但我怀疑它是否会保持一致。

我当然可能是错的。我很高兴有人向我展示解决方案。

于 2013-09-05T13:34:28.797 回答