当前位置: 首页 > 知识库问答 >
问题:

错误执行"PutObject"400错误请求aws

鲁羽
2023-03-14

我对使用AWS非常陌生,我正在学习AWS提供的使用putObject的示例https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpPHP.html

在这一点上,我所尝试的只是使用AWS SDK将任何对象html" target="_blank">上传到我的S3桶,就像在示例中一样,但是我得到一个错误,说400坏请求(完整输出如下)。我试图写入的桶是故意不公开的,因为我不想整个桶都是可访问的。我不确定这是否是问题所在,但是如果是,我不确定如何给我的代码访问权限来写入桶,留档也没有这方面的例子。如果这不是问题所在,那么我不确定还有什么地方可能出错。

我已经编辑了我的php,包括我试图访问的bucket和我自己的keyname,据我所知,这应该是上传对象后要使用的文件名。不过,我一直会遇到这样的错误:

错误输出:

在https://frank-transcribe-mediaconvert.s3.amazonaws.com/032420-test-upload.txt上执行PutObject出错;AWS HTTP错误:客户端错误:PUThttps://frank-transcribe-mediaconvert.s3.amazonaws.com/032420-test-upload.txt导致400错误请求响应:InvalidToken提供的令牌格式错误或其他(截断...)InvalidToken(客户端):提供的令牌格式错误或无效。-InvalidToken提供的令牌格式错误或无效。

以下是我的php代码:

<?php

    require 'vendor/autoload.php';

    use Aws\Sts\StsClient;
    use Aws\S3\S3Client;
    use Aws\S3\Exception\S3Exception;

    $bucket = 'frank-transcribe-mediaconvert';
    $keyname = date('mdy') . '-test-upload.txt';

    $s3 = new S3Client([
        'version' => 'latest',
        'region'  => 'us-east-1'
    ]);

    try {
        // Upload data.
        $result = $s3->putObject([
            'Bucket' => $bucket,
            'Key'    => $keyname,
            'Body'   => 'Hello, world!',
            'ACL'    => 'public-read'
        ]);

        // Print the URL to the object.
        echo $result['ObjectURL'] . PHP_EOL;
    } catch (S3Exception $e) {
        echo $e->getMessage() . PHP_EOL;
    }

?>

共有1个答案

宋成天
2023-03-14

你的上传代码看起来很好。让bucket可写不是一个好的做法,从你的问题中我推断,你也没有将其设置为公开可写。

因此,只要您不是在可以通过IAM角色对API进行身份验证的AWS实例上运行此操作,您就必须将凭据传递给S3客户端。

以下是这些文件的摘录:

php prettyprint-override">$credentials = new Aws\Credentials\Credentials('key', 'secret');

$s3 = new Aws\S3\S3Client([
    'version'     => 'latest',
    'region'      => 'us-west-2',
    'credentials' => $credentials
]);

代码中的“键”是文件名,这是正确的(S3将自己视为键值对象存储,其中目录和文件名是键,值是文件内容,这就是它被称为键的原因)。

但是,凭据的“密钥”与机密一起是可以使用IAM设置的AWS访问密钥。如果您不知道如何做到这一点,我建议您阅读AWS文档中的管理访问密钥(控制台)。

还请注意,您为其创建访问密钥(密钥和机密)的IAM用户确实需要具有适当的权限才能通过S3执行您想要执行的操作。

 类似资料:
  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 我正在尝试搜索亚马逊的产品广告,并使用botlenose来帮助我做到这一点。但是,我刚刚收到HTTP错误400。 其他一些重要信息: 我来自巴西,我的标签也来自亚马逊。这是个问题吗? 我确实检查了我的钥匙、秘密和标签,一切正常。我确实在StackOverflow上查看了其他一些问题,但对我来说没有任何效果。 当然,出于安全原因,我更改了密钥。 Traceback(最近一次调用最后一次):File"

  • 我正在使用实现一个联系人应用程序。现在,我正试图通过发送以下格式的put请求来更新联系人 我将XML作为字符串发送,作为请求的主体。这是我的xmlString(请求主体) 我写了下面的代码来发送更新联系人的PUT请求。 当我试图在中发送请求时,联系人更新成功。但是当我试图运行上面的程序时,我得到了 400错误请求错误 我不知道我哪里出错了。任何帮助都将不胜感激!

  • 目标是通过ajax将对象发送到另一台服务器,这是我为CORS设置的,下面是代码。ajax代码片段: 正确发布数据,但使用

  • 我正在为一个项目使用Hackerrank API。查看官方文档,点击这里! 在他们的网站上有一个使用UNIREST的例子, 由于我使用的是axios,所以我将其转换为类似的axios代码,如下所示: 我希望这只适用于示例中所示的示例,但它给我带来了以下错误: 请求失败,状态代码为400 错误:请求失败,状态代码为400 在createError(createError.js:16) 在sett(s