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。但我不確定。
感謝您的幫助!
@frequent - 如果你最終需要將圖像保存到磁盤,爲什麼不在你的'cfhttp'調用中執行該操作(如你的另一個線程所建議的那樣)? – Leigh 2012-08-11 05:08:19
@Leigh:我希望在沒有保存到「我的」磁盤並在S3上存儲後刪除文件。看起來它不起作用,但: - ( – frequent 2012-08-11 09:56:25
@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