2012-08-11 84 views
1

我試圖從遠程位置抓取圖像,調整大小並將其保存到Amazon S3。爲什麼從base64二進制數據生成的圖像不會顯示?

問題是,我可以將圖像保存爲S3,但是當我嘗試顯示它時,瀏覽器會說image can't be displayed because it contains errors。我敢肯定,這是因爲我做了以下內容:

一)抓住從遠程位置的圖像:

<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="objGet"> 

二)創建圖像驗證和調整

<cfset objImage = ImageNew(objGet.FileContent); 

c)之後,調整大小,我將調整大小的圖像(!)轉換回二進制數據,因爲下面的函數調用S3.cfc需要一個有效的文件路徑來讀取圖像作爲binaryData。我這樣做:

<cfset variables.filekey = toBase64(objImage)> 

,而不是這樣的:

<cffile action="readBinary" file="#arguments.uploadDir##arguments.fileKey#" variable="binaryFileData"> 

,因爲我不能得到有效的arguments.uploadDir工作,所以不是重新閱讀這裏的形象,我想我只是轉換回二進制數據並保存到S3。 將我的圖像轉換回base64字符串,然後保存在S3。

問題:
有人能告訴我我做錯了什麼嗎?我想這是base64 getasbinary和toBase64。但我不確定。

感謝您的幫助!

回答

1

您不需要將其轉換回二進制。只需使用cfimage標籤將其寫入磁盤,然後使用該路徑將圖像發送給亞馬遜。然後在完成後刪除圖像。

+0

@frequent - 如果你最終需要將圖像保存到磁盤,爲什麼不在你的'cfhttp'調用中執行該操作(如你的另一個線程所建議的那樣)? – Leigh 2012-08-11 05:08:19

+0

@Leigh:我希望在沒有保存到「我的」磁盤並在S3上存儲後刪除文件。看起來它不起作用,但: - ( – frequent 2012-08-11 09:56:25

+0

@DanShort:我想我現在會採用你的方法,但我希望這可以不用中間存儲到磁盤,我只能轉換回二進制文件,因爲s3.cfc將創建一個額外的'cffile action =「readBinary」',我想避免它,並且還需要一個有效的路徑,這又需要保存到磁盤,因爲我無法讓它與臨時路徑一起工作。所以我的想法是'readbinary> newImage> resize> backtobinary> s3' vs readbinary> newImage> resize> save-to-disk>從磁盤重新讀取> s3> delete-from-disk'。 – frequent 2012-08-11 10:02:08