2014-12-18 2 views
0

저는 여전히 ColdFusion을 처음 접하고 세션에 cffile을 업로드하고 다른 페이지에서 읽는 데 몇 가지 문제가 있습니다. 기본적으로, 나의 주요 목적은 텍스트 문서를 세션에 올바르게 업로드하고 마지막으로 다른 cfm 페이지에 표시하는 것입니다.COLDFUSION 세션에 텍스트 파일을 저장하려면 어떻게해야합니까? FileNotFoundException

Form.cfm :

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

<cffile action="read" file="#session.checkout.input.docattach#" variable="attachment"> 

<!DOCTYPE html> 
<html> 
<head> 
    ... 
</head> 
<body> 
    <cfoutput> 
     Name: #session.checkout.input.textname#</br> 
     Email: #session.checkout.input.textemail#</br> 
     Business Rationale: #attachment# </br> 
    </cfoutput> 
</body> 
</html> 

가 정확히 어떻게이 내가 세션에 넣어 수 있습니다

<cfif not structKeyExists(session.checkout, "input")> 
    <cfset session.checkout.input = {textname="", textemail="", docattach=""}> 
</cfif> 

<cfparam name="form.textname" default="#session.checkout.input.textname#"> 
<cfparam name="form.textemail" default="#session.checkout.input.textemail#"> 
<cfparam name="form.docattach" default="#session.checkout.input.docattach#"> 

<cfif structKeyExists(form, "Submit")> 
    <cfset form.textname = trim(htmlEditFormat(form.textname))> 
    <cfset form.textemail = trim(htmlEditFormat(form.textemail))> 
    <cffile action="upload" fileField="docattach" destination="#session.checkout.input.docattach#" nameConflict="overwrite"> 
    <cfset session.checkout.input = {textname=form.textname, textemail=form.textemail, docattach=<--How do I store cffile upload result here?-->}> 

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

<!DOCTYPE html> 
<html> 
<head> 

FormComplete.cfm? 또 다른 질문은 이미지 나 문서의 결과를 표시하는 것입니다. 내가 사용할 수있는 명령은 무엇입니까?

+1

왜 세션 범위에 넣어야한다고 생각하십니까? –

+0

@DanBracuk 당신이 제안 할 수있는 다른 방법이 있습니까? 예? –

+1

나는 단순함을 제안한다. 또한 한 번에 한 단계 씩. 먼저 파일을 업로드하는 페이지로 양식을 제출하십시오. 이후에 당신이하는 일은 유형에 달려 있지만 이미지라고 가정 해 봅시다. HTML 앵커 태그로 표시 할 수 있습니다. 다른 파일 유형이라면 cfheader 및 cfcontent 태그를 살펴볼 수 있습니다. –

답변

3

목적지는 서버의 하드 드라이브 (또는 RAM 드라이브)의 실제 파일 경로 여야합니다. session.checkout.input.docattach의 값은 현재 경로가 아닌 빈 문자열입니다. 파일을 업로드하고 나면 새로 업로드 된 파일의 경로에 대한 정보가 들어있는 cffile 변수가 생기고 fileRead()를 사용하여 파일을 읽고이를 임의로 변수에 넣을 수 있습니다.

체크 아웃 개의 cfile 조치에 대한 문서를 =이 악용 보안을 만들 수 있기 또한 https://wikidocs.adobe.com/wiki/pages/viewpage.action?pageId=87505342

는, 웹 액세스 가능한 디렉토리에 파일을 업로드하지 않습니다 업로드 할 수 있습니다.

+0

모든 대상에 대해 GetTempDirectory()를 사용하면 더 좋을까요? –

+1

그것은 훌륭한 해결책이 될 것입니다. 실제로 문서에서 CF temp 디렉토리는 기본적으로 사용되므로 cffile 구조체에서 파일 이름을 다시 가져온 다음 getTempDirectory()와 업로드 된 파일 이름을 통해 경로를 작성해야한다고 설명합니다. 또한 이전에이 내용을 언급 했음에 틀림 없지만 페이지에서 출력하고 JavaScript 악용 또는 XSS 공격처럼 악의적 인 내용을 포함 할 수 있으므로 파일의 내용을 신뢰할 수 있는지 또는 HTML에서 이스케이프 처리해야합니다. –

관련 문제