Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Amazon S3例外情况:";指定的密钥不存在";_Android_Amazon Web Services_Amazon S3 - Fatal编程技术网

Android Amazon S3例外情况:";指定的密钥不存在";

Android Amazon S3例外情况:";指定的密钥不存在";,android,amazon-web-services,amazon-s3,Android,Amazon Web Services,Amazon S3,我正在Android应用程序中使用AmazonS3Client,使用getObject请求从我的AmazonS3存储桶下载图像 目前,我遇到了以下例外情况: com.amazonaws.services.s3.model.AmazonS3Exception: The specified key does not exist. (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey; 即使我能够在S3存储桶中看到具有指定键的对

我正在Android应用程序中使用AmazonS3Client,使用getObject请求从我的AmazonS3存储桶下载图像

目前,我遇到了以下例外情况:

com.amazonaws.services.s3.model.AmazonS3Exception: 
The specified key does not exist.
 (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey;

即使我能够在S3存储桶中看到具有指定键的对象。

这个错误实际上相当直接。这仅仅意味着您的文件不存在于S3存储桶中。有几件事可能是错误的:

  • 您可能试图引用错误的文件。仔细检查您试图检索的路径

  • 每当上传文件时,它一定失败了。检查S3Sync进程的日志,查看是否可以找到任何相关输出


  • 对我来说,该对象确实存在并且上传正确,但是,它的S3URL仍然抛出相同的错误:

    <Code>NoSuchKey</Code>
    <Message>The specified key does not exist.</Message>
    
    我发现原因是因为我的文件名包含一个
    #
    符号,我猜某些字符或符号也会导致此错误


    删除此字符并生成新的S3URL解决了我的问题。

    在我的情况下,出现错误是因为我已将包含网站文件的整个文件夹上载到容器中


    我通过将文件夹外的所有文件直接移动到容器中解决了这个问题。

    问题的原因是错误的或输入了Bucket/Key名称。请务必检查您提供的bucket或key名称是否存在。

    请注意,由于s3的最终一致性模型,即使文件路径正确,也可能发生这种情况。基本上,在写入对象后读取该对象可能会有一些延迟。有关更多信息,请参阅。

    不要忘记存储桶是特定于区域的。这可能是个问题

    还可以尝试使用S3控制台导航到实际对象,然后单击
    复制路径
    ,您将得到如下结果:

    s3:///object.txt


    只要你把它传递给正确的语法分析,我发现这是最安全的做法

    步骤1:获取最新的
    aws java sdk

    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws -->
    <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk</artifactId>
    <version>1.11.660</version>
    </dependency>
    
    如果您确定bucketname存在,
    指定的键不存在错误
    将意味着bucketname拼写不正确(包含斜杠或特殊字符)。有关命名约定,请参阅

    文件引述:

    如果请求的对象在bucket中可用,并且用户仍然可用 从Amazon S3获取404 NoSuchKey错误时,请检查以下内容:

    确认请求与对象名称完全匹配,包括 对象名称的大小写。对S3对象的请求是 区分大小写。例如,如果一个对象名为myimage.jpg,但是 请求Myimage.jpg,然后请求者收到404 NoSuchKey 错误。确认请求的路径与对象的路径匹配。 例如,如果对象的路径为 awsexamplebucket/Downloads/二月/Images/image.jpg,但是 请求的路径是awsexamplebucket/Downloads/二月/image.jpg,然后 请求者收到404 NoSuchKey错误。如果路径指向 对象包含任何空格,请确保请求使用正确的 用于识别路径的语法。例如,如果您使用的是AWS CLI 要将对象下载到Windows计算机,必须使用引号 对象路径周围的标记,类似于:aws s3 cp “s3://awsexamplebucket/Backup Copy Job 4/3T000000.vbk”。或者, 您可以在中启用服务器访问日志来查看请求记录 有关可能导致404错误的问题的更多详细信息


    在我的例子中,这是因为文件名包含空格。由于以下原因解决了此问题(与问题无关):

    您还需要将urllib作为具有相应版本的层上传(如果lambda是Python 3.7,则必须在Python 3.7环境中打包urllib)


    原因是AWS将“”转换为“+”(为什么…),这确实有问题…

    我也遇到了这个问题,但在我的情况下,我在构造目标键时无意中更改了源对象键的内部状态:

      source_objects.each do |item|
        key = item.key.sub!(source_prefix, dest_prefix)
        item.copy_to(bucket: dest_bucket, key: key)
      end
    

    我是Ruby新手,错过了
    sub有副作用,应该改用
    sub

    我在NodeJS Lambda函数中遇到了这个问题,该函数是由文件上传到S3触发的

    我的错误是我没有解码包含冒号的对象键。更正我的代码如下:

    let key = decodeURIComponent(event.Records[0].s3.object.key);
    

    在我的情况下,我有错误的密钥名。确保您有正确的密钥名。

    我认为,当指定的bucket中不存在对象/文件时,通常会发生此错误。你能再检查一下你用于打字的存储桶的名称吗?它是否与你看到的对象/文件的存储桶相同?这肯定不是身份验证错误。亚马逊文档糟透了,这个问题不能被否决。现在,在任何文件夹下都找不到Index.html。AWS S3权限并不像AWS文档所说的那样。我喜欢有十几个不同的答案,它们都是正确的。链接过期使答案在一段时间后变得无用,您应该从该链接中提取信息并更新此答案以使其完整。请随意分享您的资料来源。。没关系。谢谢,这有助于保持干净和有用。我在使用React应用程序处理自己的路由时遇到了这个问题。我的解决方案是将
    root
    errors
    重定向到同一个
    index.html
    文件。这样一来,前端应用程序就可以充当一个包罗万象的角色,并理解任何URL方案。令人不快的字符是一个括号:(我面临同样的问题,我的文件名是“abcd.jar”。下载函数扩展名也是特定的吗?@RahulMunjal我不太确定文件扩展名,也许可以尝试将其放在.zip文件夹中?看看是否有效。另外,请仔细检查
    from urllib.parse import unquote_plus
    key_name = unquote_plus(event['Records'][0]['s3']['object']['key'])
    
      source_objects.each do |item|
        key = item.key.sub!(source_prefix, dest_prefix)
        item.copy_to(bucket: dest_bucket, key: key)
      end
    
    let key = decodeURIComponent(event.Records[0].s3.object.key);