나는 Coldfusion8
을 사용하고 내가 같이하고있어 원격 서버에서 이미지를 가져 오기 위해 필요 해요 :ColdFusion에서 CFHTTP로 가져온 파일의 임시 경로를 가져 오는 방법은 무엇입니까?
<cfhttp timeout="45" throwonerror="no" url="#variables.testFilePath#" method="get" useragent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12" getasbinary="yes" result="variables.objGet">
<cfset variables.objImage = ImageNew(variables.objGet.FileContent)>
지금은 아마존 S3에 이미지를 저장해야하지만 함수는 내가 사용하려는
:
<cfset result = s3.putObject(url.b,file.serverFile,file.contentType,'300',form.cacheControl,'30',form.acl,form.storageClass,form.keyName,GetTempDirectory())>
내 생성 된 이미지에서 찾을 수 있습니다 디렉토리를 필요
는 질문:.
는 방법이 있나요 cfhttp
으로 당겨지고 imageNew
을 사용하여 이미지로 변환 된 이미지 파일의 디렉토리를 가져 오려면? 또는 먼저 디스크에 파일을 저장해야합니까? 저장하기 전에 크기를 조정해야하므로 먼저 디스크에 저장하지 않고 얻을 수 없을 수도 있습니다.
포인터 주셔서 감사합니다!
편집 :
<!--- getAsBinary --->
<cfhttp timeout="45"
throwonerror="no"
url="#variables.testFilePath#"
method="get"
useragent="..."
getasbinary="yes"
result="objGet">
<!--- validate --->
<cfif len(variables.testFilePath) EQ 0>
<cfset variables.errorCount = variables.errorCount+1>
<cfset variables.failedLoads = "FILE NOT FOUND" >
<cfelse>
<cfif len(objGet.Filecontent) EQ 0>
<cfset variables.errorCount = variables.errorCount+1>
<cfset variables.failedLoads = "COULD NOT LOAD IMAGE">
<cfelseif NOT listfindnocase(variables.allow, variables.fileExt) >
<cfset variables.errorCount = variables.errorCount+1>
<cfset variables.failedLoads = "WRONG FILE TYPE">
<cfelse>
<cftry>
<cfscript>
objImage = ImageNew(objGet.FileContent);
ImageSetAntialiasing(objImage,"on");
<!--- resize/crop --->
variables.keyName = Session.loginid & "_S_";
</cfscript>
<!--- convert modified image back to binary --->
<cfset variables.filekey = toBase64(objImage)>
<!--- pass to s3.cfc --->
<cfset result = s3.putObject(variables.bucketName, variables.filekey, variables.contentType, variables.httptimeout, variables.cacheControl, variables.cacheDays, variables.acl, variables.storageClass, variables.keyName, variables.imageSrc, "true")>
<cfcatch>
<cfset variables.errorCount = variables.errorCount+1>
<cfset variables.failedLoads = "NO IMAGE">
</cfcatch>
</cftry>
</cfif>
내가 진에 자른 이미지를 다시 변환 할 필요는 s3.putobject
달리 구성하려고 노력하는 또 다른 cffile action="readBinary"
과 휴식을 할 것이기 때문에 :
나는이 같은 작업 있어요
<cffile action="readBinary" file="#arguments.uploadDir##arguments.fileKey#" variable="binaryFileData">
이 012를 사용하여 임시 파일 경로를 얻을 수있는 반면 (이미지는 여전히 임시)이고 uploadDir
으로 설정하면 CF docs 경로는 드라이브 문자 또는 슬래시로 시작하는 절대 경로 여야하며 그렇지 않으면 www-root 임시 디렉토리가 사용되기 때문에 도움이되지 않습니다.
필자의 경우 임시 www-root 디렉토리는 C:/
이고 임시 파일 CFFile-Servlet은 E:/
이고 상대 경로는 작동하지 않습니다 (파일을 찾을 수 없음). 그래서 s3.cfc에서 이미지를 다시 읽을 방법이 없으므로 S3.cfc를 호출하기 전에 바이너리로 다시 변환합니다. s3.cfc에게 이미 이진 이미지를 보내고 있고 다시 읽을 필요가 없다는 또 다른 매개 변수 (1/0)를 전달합니다. 그래서 같이
는 :
<!--- if encoded is true, filekey already is the encoded image --->
<cfif arguments.encoded EQ "true">
<!--- already sending binary image --->
<cfset binaryFileData = arguments.fileKey>
<cfelse>
<!--- Default --->
<cffile action="readBinary" file="#arguments.uploadDir##arguments.fileKey#" variable="binaryFileData">
</cfif>
나는 이것이 가장 현명한 방법 성능 현명 있는지 확실하지 않습니다, 그러나 아주 부드럽게 작동하는 것 같다. 의견 환영합니다!
확인. 이걸 시험해 봐. 나는 내가 어떻게 사는지 재판 할 것이다. 지금까지 감사합니다 – frequent
한 가지 질문 : [this] (http://www.bennadel.com/blog/1890-Getting-The-Image-SRC-Of-ColdFusion-s-CFImage-WriteToBrowser-Temporary-Image-With- CFXML.htm) 효율적인 방법이 될까요? 이미지를 정리하지 않고 정리할 필요가 없습니다. – frequent
죄송합니다. 저는이 접근법이 귀하의 경우에 어떻게 사용될 수 있는지 모르겠습니다 ... 기본적으로 파일을 다운로드하여 다른 곳으로 업로드해야합니다. 더 효율적인 솔루션은'rsync' (Unix)와 같은 것을 사용할 수 있습니다. Railo를 사용하는 경우 맵핑으로 S3 버킷을 마운트하고 바로 파일을 저장할 수 있습니다. 비록 this'd가 일하는 지 명확히하지 않고있다. – Sergii