2009-05-13 5 views
9
를 호출하기 전에 파일 이름을 어떻게 얻을 수 있습니까? 임시 파일의 파일 이름은 가져올 수 있지만 실제 파일 이름은 가져올 수 없습니다. PHP에서는 $ _FILES를 사용하여 원하는 것을 얻을 수 있습니다. 그러나 ColdFusion에는 그런 것이 없다고 말할 수 있습니다. 파일 이름을 클라이언트 측에서 가져올 수 있지만 실제로이 서버 측에서 수행하려고합니다. 감사
+7

방법은 매우 ColdFusion에서의 일반적인 같은 기본 기능을 가지고 있지. – Teekin

답변

7

나는 CFFILE를 호출하기 전에 찾을 수있는 방법을 모르겠지만, 해결 방법이있을 수 있습니다.

<cffile action="upload">으로 전화 할 경우 result="variable"을 사용하여 결과를 지정할 수 있습니다. 따라서 업로드 파일을 대상과 함께 임시 파일로 호출하십시오. result 변수는 클라이언트 컴퓨터에있는 파일의 이름 인 member clientFile을 포함하는 struct입니다.

이제 <cffile action="move">을 사용하여 원본 파일 이름과 관련된 작업을 수행 할 수 있습니다.

+0

답변 주셔서 감사합니다 ... 우리는이 솔루션을 유일한 방법으로 생각했습니다. 나는이 질문을 더 많은 답변을 위해 열어 둘 것이다. 그러나 나는 당신이 게시 한 것을 훨씬 잘 얻을 수 있다고 생각하지 않는다. – nlaq

+0

여러 개의 ** 파일 업로드 ** 요청을 연속적으로 만들 때 문제가 발생합니다. –

-1

입력 컨트롤에 name 속성이 정의되어있는 경우 파일 이름은 FORM 범위에 있습니다. 예를 들어 :

<cfif not structIsEmpty(form)> 
    <cfdump var="#form#"> 
<cfelse> 
    <html> 
    <head> 
     <title>Title</title> 
    </head> 
    <body> 
     <form method="POST" action="#cgi.SCRIPT_NAME#"> 
      <input type="file" name="fileIn" /> 
      <input type="Submit" name="formSubmit"> 
     </form> 
    </body> 
    </html> 
</cfif> 
+1

우리가 원하지 않는 tmp 파일 이름을 제공합니다 ... – nlaq

+0

아빠, 나는 enctype을 중단했습니다. 이제 나 자신을 수정해라. –

0

또 다른 옵션은 클라이언트 측 코드는 다음 서버 측을 것 파일 이름과 숨겨진 양식 필드를 채울 가질 수 있습니다.

벤 둠의 대답은 일반적으로 어떻게 접근 할 것인가입니다.

+0

네, 우리는 이것도 고려했습니다. 그러나 당신의 인생을 비참하게 만들기 위해 치열한 FireBug를 사용하지 않는 사용자를 믿을 수는 없습니다. 클라이언트 측 var이 거짓말을 찾으면 (일단 사용자가 업로드를하고 실제 파일 이름을 얻으면) 요청을 다시 되돌릴 수 있고 사용자에게 플래그를 지정할 수 있다고 생각합니다.하지만 더 훌륭한 솔루션을 원합니다. 대답 주셔서 감사합니다 :) – nlaq

1

우리가하는 방법은 다음과 같습니다. 기본적으로 파일 필드와 문자열 필드가 있습니다. 양식을 제출하기 전에 JavaScript가 브라우저에서 파일 이름을 가져옵니다. 분명히 상대방의 파일 이름이 실제로 존재하는지 확인해야합니다 (예 : JavaScript가 비활성화되어 있으면 사용자가 비워 둘 것입니다). 그리고 플랫폼 차이를 처리하기 위해 문자열을 구문 분석해야합니다 (/users/bob/file.jpgC:\Documents and Settings\bob\file.jpg)

<script> 
    function WriteClientFileName(){ 
     $('ClientFileName').value = $('ClientFile').value; 
    } 
</script> 

<form enctype="multipart/form-data" onsubmit="WriteClientFileName();"> 

    <input type="File" name="ClientFile" id="ClientFile"> 
    <input type="hidden" name="ClientFileName" id="ClientFileName" value=""> 

    <input type="submit"> 
</form> 

덧붙여 말하자면,이 기술은 교차 언어입니다. RoR, PHP, JSP 등에서도 똑같이 작동합니다.

편집 : 사용자가 "치열한 FireBug"를 사용한다면 어떤 문제가 있습니까? Firebug를 가지고 있지 않더라도 파일의 이름을 바꾸고 입력을 변경할 수 있습니다. 게다가 입력 내용의 유효성을 검사하는 것입니까?

-1

ColdFuson, Railo 또는 OpenBD에서 서버에 저장하기 전에 업로드 된 파일의 파일 이름을 알 수있는 방법이 없습니다. 나는 일반적으로 파일을 저장하기 전에 createUUID() 함수를 사용하여 '내'새 파일 이름을 생성합니다.

2

와우, 나는 위대하고 쉬운 해결책을 발견했다! 작은 자바 스크립트로

이렇게하면 cffile 업로드 및 실제 파일의 임시 파일 이름을 얻을 수 있습니다.

GetPageContext().formScope().getUploadResource('your_file_input_form_name').getName();

어쩌면이뿐만 아니라 어도비 서버에서 작동 : 나는 라일로를 사용하여 원래 파일 이름을 발견하고있어 데이터베이스

<html> 
<head> 
<script type="text/javascript"> 
function PassFileName() 
{ 
document.getElementById("fileName").value=document.getElementById("fileUp").value; 
} 
</script> 
</head> 
<body> 
<form name="form1" method="post" enctype="multipart/form-data" > 
File: <input type="file" name="fileUp" id="fileUp" size="20" onchange="PassFileName()" /> <br /> 
Title: <input type="text" name="Title" id="Title"><br /> 
<input type="hidden" id="fileName" size="20" name="fileName" /> 
<input type="submit" name="submit"> 
</form> 
</body> 
</html> 
6

에 대한 JPG 이름? 업로드 된 파일의 이름을 어떻게 든 변경하고 두 개의 임시 디렉토리를 통해 이동하려는 경우 (Renaming Files As They Are Uploaded (how CFFILE actually works) 참조)

+0

고마워,이 정확하게 필요합니다. 매력처럼 작동합니다! – Mattijs

+0

참고 사항이 기능은 Adobe ColdFusion이 아닌 Railo에서만 작동합니다. Adobe ColdFusion에서 이것을 수행하는 방법에 대한 내 대답을 참조하십시오. –

14

예 가능합니다. 당신은 CFFILE 태그를 사용하기 전에 클라이언트 파일 이름을 잡기 위해이 기능을 사용할 수 있습니다 : 여기

<cffunction name="getClientFileName" returntype="string" output="false" hint=""> 
    <cfargument name="fieldName" required="true" type="string" hint="Name of the Form field" /> 

    <cfset var tmpPartsArray = Form.getPartsArray() /> 

    <cfif IsDefined("tmpPartsArray")> 
     <cfloop array="#tmpPartsArray#" index="local.tmpPart"> 
      <cfif local.tmpPart.isFile() AND local.tmpPart.getName() EQ arguments.fieldName> <!--- ---> 
       <cfreturn local.tmpPart.getFileName() /> 
      </cfif> 
     </cfloop> 
    </cfif> 

    <cfreturn "" /> 
</cffunction> 

더 많은 정보는 : http://www.stillnetstudios.com/get-filename-before-calling-cffile/

+0

그것은 작동합니다! 고맙습니다. 요청에서 그런 기본적인 것을 얻는 것이 어렵다는 것은 당연한 일이지만 CF 개발자의 삶입니다. –

+0

멋진 기능! 감사. ColdFusion 10에서 작동하도록 확인되었습니다. – PhilNicholas

관련 문제