【问题标题】:ColdFusion cffile upload - optionalColdFusion cffile 上传 - 可选
【发布时间】:2014-10-07 20:19:08
【问题描述】:

我创建了一个在线应用程序,只要有人上传了简历,它就可以正常工作。我们现在有可用的职位,其中简历是可选的,但如果队列中没有文件,系统会抛出错误。

我已尝试过 IsDefined 和 StructKeyExists,但无法使其正常工作。任何建议都非常感谢...

<cfset destination = expandPath("./uploads")>
<cfif IsDefined('form.submitapp')>
        <cfif IsDefined("form.uploadfile")>
            <cffile action="upload" filefield="uploadfile" destination="#destination#" nameConflict="makeUnique">
            <cfif isDefined("CFFILE.serverFile")>
            <cfset form.resume = CFFILE.serverFile>
            </cfif>
        </cfif>

  <cfinsert tablename=...

【问题讨论】:

  • 分享您的表单代码。始终共享您的表单代码。你有 form.submitapp 和 form.uploadfile 的 cfparam 吗?如果是这样,那很可能是您的问题。
  • 另外,请记住“空”与“未定义”是不同的概念。大多数(不是全部)表单字段都将被提交,无论它们是否包含值。这意味着它们在操作页面上定义。它们将只有一个空字符串的值,即“”。 structKeyExists 之类的函数不检查字段 value。他们检查是否定义了一个字段。因此,请确保您对工作使用了正确的比较。
  • 您使用 cfinsert 而不是 cfquery 的事实降低了您处理可选表单字段等事情的灵活性。
  • 另外,一旦你解决了这个问题,因为这是一个很容易解决的问题,最好将 CFFILE 和后续的 cfset 放在像 &lt;cftry&gt;&lt;cffile...&gt;&lt;cfset....&gt;&lt;cfcatch&gt;An error with the upload occurred.&lt;/cfcatch&gt;&lt;/cftry&gt; 这样的 CFTRY/Catch 中。首先解决这个问题,这样您就不会陷入简单的逻辑错误。

标签: coldfusion cffile


【解决方案1】:

正如括号所说 - 你可能有一个默认值。试试这个:

<cfset destination = expandPath("./uploads")>
<cfif IsDefined('form.submitapp')>
  <cfif IsDefined("form.uploadfile") AND len(trim(form.uploadFile))>
  <cffile action="upload" filefield="uploadfile" destination="#destination#" nameConflict="makeUnique">
    <cfif isDefined("CFFILE.serverFile")>
      <cfset form.resume = CFFILE.serverFile>
    </cfif>
  </cfif>
</cfif>

【讨论】:

  • 很难说没有看到实际的表单和错误消息(提示,提示;-),但即使没有cfparam,也可能发生错误。文件字段仍将被定义,即使它为空。当他们调用cffile action="upload" 时,这将导致错误。上面的len(trim(..)) 检查应该可以避免这个问题。 @BigMike - 不需要isDefined("CFFILE.serverFile")。这是一个系统变量,总是在成功上传后定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 2011-03-28
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多