为什么从base64二进制数据生成的图像不会显示?

时间:2012-08-11 00:20:22

标签: coldfusion upload amazon-s3 amazon binaryfiles

我正在尝试从远程位置抓取图像,调整其大小并将其保存到Amazon S3。

问题是,我可以将图像保存到S3,但是当我尝试显示它时,浏览器会显示image can't be displayed because it contains errors。我确定这是由于我做了以下事情:

a)从远程位置抓取图像:

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

b)创建图像以验证和调整大小

<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 个答案:

答案 0 :(得分:1)

您无需将其转换回二进制文件。只需使用cfimage标记将其写入磁盘,然后使用该路径将图像发送到亚马逊。然后在完成后删除图像。