【问题标题】:Check if file exists on Amazon S3检查 Amazon S3 上是否存在文件
【发布时间】:2018-08-01 19:32:20
【问题描述】:

所以,我要做的是使用 Javascript 检查我的 Amazon S3 上是否存在图像。

我可以通过预加载图像的典型方式来执行此操作,并使用 onloadonerror 事件来检查图像是否存在。

var img = new Image;
img.src = imageUrl;
img.onerror = function()....
img.onload = function()...

我现在想要实现的是相同的,但没有完全下载图像。 假设我有一个可能的 3mb 图像。如果我检查我现在的操作方式,如果图像不存在,它将进入 onerror 事件,我将调用我的服务器以生成图像并那我再检查一次。当图像存在时,它将下载 3mb 图像并进入 onload 事件。

如果图片不存在,亚马逊会返回 403 Forbidden 状态码。如果确实存在,则返回 200 Ok

我的问题是:

有没有办法只检查状态码或其他方式而不完全下载图像?

谢谢!!

【问题讨论】:

  • 按照这个answer,也许请求headObject
  • 感谢您的回答@Varinder,但我只使用常规 Javascript,没有任何库
  • headObject 可以使用REST API

标签: javascript image amazon-web-services amazon-s3


【解决方案1】:

尝试执行HEAD 请求,如本答案所示

https://stackoverflow.com/a/333657/209067

上面链接的答案的代码副本:

function UrlExists(url, callback)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url);
    http.onreadystatechange = function() {
        if (this.readyState == this.DONE) {
            callback(this.status != 404);
        }
    };
    http.send();
}

如果您的情况需要检查 403 而不是 404

【讨论】:

  • 感谢您的回答巴勃罗。问题是,我总是得到 0 作为状态,没有状态 200 或 403 的迹象......不知道为什么!我检查了开发人员工具 -> 网络选项卡,我可以看到使用方法“HEAD”的调用以及它如何接收 403
  • 您可能遇到了 JS 错误,请检查控制台是否有错误并从那里获取。
  • 不是 JS 错误。我认为这与 CORS 和调用外部服务器有关
  • 对,如果确实是CORS问题,那么浏览器控制台应该有错误
  • @JVLobo 如果您拥有 S3 存储桶,则可以在 AWS 中设置 CORS 策略。
猜你喜欢
  • 2020-06-14
  • 2013-09-09
  • 2013-06-12
  • 2012-08-10
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 2015-01-14
  • 2016-11-12
相关资源
最近更新 更多