如何使用 Coldfusion fileExist 检查 Amazon S3 上是否存在文件?

fre*_*ent 1 coldfusion amazon-s3 file-exists amazon-web-services

我正在运行Coldfusion8并将文件上传到 Amazon S3。

显示图像时,我想检查 S3 是否有可用图像,如果没有则显示后备图像。我的问题是,不知道如何检查现有图像。

如果我列出图像的链接,它是这样的:

http://s3.amazonaws.com/bucket/l_138a.jpg?AWSAccessKeyId=_key_&Expires=_exp_&Signature=_signature_
Run Code Online (Sandbox Code Playgroud)

我正在尝试检查现有文件,如下所示:

<cfif fileExists("http://s3.amazonaws.com/bucket/s_" & items.filename)>
    <cfdump output="e:\website\test\dump.txt" label="catch" var="found!!!">
</cfif>
Run Code Online (Sandbox Code Playgroud)

问题:检查图像时
我是否总是必须提供?accesskey, expires and signature如果我在浏览器中输入没有凭据的图像路径,则会加载图像,所以我不明白为什么我的fileExist不工作。任何想法?

Mat*_*che 5

如果您设置了站点范围内的页面未找到消息,则可以使用 cfhttp。

<cfhttp url="http://a.espncdn.com/photo/2012/0813/nfl_u_flynn1x_203.jpg" method="head">
<cfdump var="#cfhttp.filecontent#">
Run Code Online (Sandbox Code Playgroud)

返回 java.io.ByteArrayOutputStream 的对象

<cfhttp url="http://a.espncdn.com/photo/20notanimage3.jpg" method="head">
<cfdump var="#cfhttp.filecontent#">
Run Code Online (Sandbox Code Playgroud)

回报<html> <body> <h1>Error Processing Request</h1> </body> </html>

还可以检查服务器返回的statuscode

<cfhttp url="http://a.file.exists.gif" method="head">
<cfdump var="#val(cfhttp.statuscode)#">
Run Code Online (Sandbox Code Playgroud)

200 可以,404 未找到等

  • 更好的是,使用 method="head" (3认同)