. 의견을 바탕으로 <cffunction name="IsRtfFile" returntype="Boolean" output="false">
<cfargument name="FileName" type="String" />
<cfset var FileData = 0 />
<cfloop index="FileData" file="#Arguments.FileName#" characters="5">
<cfbreak/>
</cfloop>
<cfreturn FileData EQ '{\rtf' />
</cffunction>
:이
여기에 매우 빠르게하는 방법을 메모리에 전체 파일을로드하지 않도록하려면, 당신은 단지 처음 몇 글자를로드하기 위해 다음을 수행 할 수 있습니다 "어떤 형식입니까?"함수를 생성 할 수 있습니다. 완벽하지는 않지만 아이디어를줍니다 ...지적 가치가 물론
<cffunction name="determineFileFormat" returntype="String" output="false"
hint="Determines format of file based on header of the file's data."
>
<cfargument name="FileName" type="String"/>
<cfset var FileData = 0 />
<cfset var CurFormat = 0 />
<cfset var MaxBytes = 8 />
<cfset var Formats =
{ WordNew : 'D0,CF,11,E0,A1,B1,1A,E1'
, WordBeta : '0E,11,FC,0D,D0,CF,11,E0'
, Rtf : '7B,5C,72,74,66' <!--- {\rtf --->
, Jpeg : 'FF,D8'
}/>
<cfloop index="FileData" file="#Arguments.FileName#" characters="#MaxBytes#">
<cfbreak/>
</cfloop>
<cfloop item="CurFormat" collection="#Formats#">
<cfif Left(FileData , ListLen(Formats[CurFormat])) EQ convertToText(Formats[CurFormat]) >
<cfreturn CurFormat />
</cfif>
</cfloop>
<cfreturn "Unknown"/>
</cffunction>
<cffunction name="convertToText" returntype="String" output="false">
<cfargument name="HexList" type="String" />
<cfset var Result = "" />
<cfset var CurItem = 0 />
<cfloop index="CurItem" list="#Arguments.HexList#">
<cfset Result &= Chr(InputBaseN(CurItem,16)) />
</cfloop>
<cfreturn Result />
</cffunction>
, 많은 일반적인 텍스트 기반 것들 (CFM, CSS, JS 등)를 포함하여 '헤더가'형식에 모든 작동이 실 거예요.
이것은 완벽합니다! 호기심에서이 기술을 사용하여 문서를 만든 Word의 버전을 검색 할 수 있습니까? POI가 Word 95에서 생성 된 것으로 생각되는 파일에 적합하지 않은 다른 문제를 실행했습니다. 또는 POI를 모두 무시하고 FileRead()로 가져온 데이터를로드하여 db에로드합니다. 방법? 결국 내 목적은 문서의 검색 만 가능하지만 표시 할 수 없게하는 것입니다. –
다른 버전의 파일 표시 자 시퀀스를 식별 할 수있는 경우이 방법을 여러 형식에 사용할 수 있습니다. 많은 바이너리 파일 형식은이 방법으로 형식을 식별하는 최대 8 바이트로 시작하기 때문에이 형식을 사용할 수 있습니다. –
전체 파일을 읽는 경우 ... FileRead를 사용하면 파일을 텍스트로 처리하므로 Word 문서가 손상 될 수 있는지 여부는 알 수 없습니다. 그렇다면 FileReadBinary를 시도해 볼 수는 있지만 데이터베이스의 텍스트로 검색 할 수 있는지 확실하지 않습니다. –