2015-01-05 5 views
1

파일을 양식에 업로드 할 때 문제가 있습니다. 기본적으로 form.cfm에 이전에 제출 된 파일이 세션에 포함되어 있는지 확인하려고합니다. 그러나 문제가 발생했습니다 : 복잡한 개체 형식을 간단한 값으로 변환 할 수 없습니다.양식에 파일 입력이 있는지 확인하는 방법은 무엇입니까? ColdFusion

form.cfm 코드 :

<cfif structKeyExists(form, "Submit")> 

    <cfif isDefined("Form.filecontent") AND evaluate("Form.filecontent") NEQ "" > 

     <cffile action = "upload" 
      fileField = "file" 
      destination = "#GetTempDirectory()#" 
      nameConflict = "overwrite"> 

      <cfset form.storage = cffile> 

    <cfelse> 

     <cfset form.storage = ""> 

    </cfif> 

    <cfset session.checkout.input = { 
     storage=form.storage 
    }> 

    <cflocation url="formcomplete.cfm" addToken="false"> 

</cfif> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>Testing</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 

    <link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css" /> 
    <!-- Other Scripts or CSS... --> 
</head> 
<body> 
    <form method="post" enctype="multipart/form-data"> 

     <cfoutput> 
      <input id="filecontent" name="filecontent" class="input-file" type="file" accept="application/vnd.ms-excel"> 
     </cfoutput> 

     <button value="Submit" type="submit" id="Submit" name="Submit" class="btn btn-default">Submit</button> 
    </form> 
</body> 
</html> 

코드는 임시 디렉토리에 파일의 업로드를 보여주고 세션에 변수를 저장 : 다음은 내 코드입니다. 비어 있으면 세션 변수의 form.storage가 빈 문자열로 저장됩니다.

formcomplete.cfm 코드 : form.cfm 파일이 포함되어있는 경우

<cfif not structKeyExists(session, "checkout")> 
    <cflocation url="form.cfm" addToken="false"> 
</cfif> 

<cfif evaluate("session.checkout.input.storage") NEQ "">  <!-- !PROBLEM HERE! --> 
    <cfset strPath = session.checkout.input.storage /> 
</cfif> 
...More Codes after these. 

는 오류가 formcomplete.cfm의 5 라인에서 발생한다. form.cfm에 파일이 포함되어 있지 않으면 프로세스가 문제없이 진행됩니다.

오류 예외 ::

복잡한 오브젝트 유형은 단순 값으로 변환 할 수 없습니다.

표현식에서 변수 또는 중간 식 결과를 간단한 값으로 요청했습니다. 그러나 결과는 간단한 값 으로 변환 할 수 없습니다. 간단한 값은 문자열, 숫자, 부울 값 및 날짜/시간 값입니다. 쿼리, 배열 및 COM 개체는 복잡한 값의 예입니다. 가장 큰 오류의 원인은 에서 간단한 값으로 복잡한 값을 사용하려고 시도했기 때문입니다. 예를 들어 cfif 태그에서 검색어 변수 을 사용하려고했습니다.

어떻게하면 현재 코드를 개선하고 문제를 해결할 수 있습니까? * 업데이트 : 올바른 cfif 문은 무엇입니까?

답변

6

몇 가지 문제 - 파일 필드의 이름을 올바르게 입력했는지 확인하십시오 (fileContent는 양식의 필드 이름 임).

두 번째로, cffile.serverDirectory를 지정하지 않았기 때문에 발생한 오류입니다. 오류가 발생하기 전에 formComplete.cfm에 세션을 덤프하면 struct가 표시되어 오류의 원인이됩니다. 당신은 그 구조체, 특히 serverDirectory에 더 깊이 들어가야했습니다. 변경 사항은 다음과 같습니다.

<cffile action = "upload" 
     fileField = "filecontent" 
     destination = "#GetTempDirectory()#" 
     nameConflict = "overwrite"> 

     <cfset form.storage = cffile.serverDirectory> 

그리고 평가 기능을 사용하지 않아도됩니다. 나는 이런 식으로 재 작성합니다 :

<cfif isDefined("Form.filecontent") AND Form.filecontent IS NOT "" > 

또는

<cfif isDefined("Form.filecontent") AND len(Form.filecontent) > 
+0

* RE : 특히 serverDirectory * 비록 전체 경로를 얻을, 당신은 * *은'serverDirectory'과'serverFile' 모두를 사용할 필요가 변수. – Leigh