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

PHP通过预先签名的url将文件上传到Amazon S3存储桶

东博瀚
2023-03-14

我正试图通过一个预先签名的URL将一个文件上传到Amazon S3 bucket,这是我从第三个服务获得的。意思是,我没有生成这个URL。我已经阅读了AWS文档,但我不能把它们全部放在一起。这就是我指的。

  • 预选。php

目前,我的代码是这样的。请注意,$key是预先签名的URL。

use Aws\S3\S3Client;
use Aws\Exception\AwsException;
use GuzzleHttp\Psr7\Stream;
use GuzzleHttp\Psr7\CachingStream;

$client = new GuzzleHttp\Client(['verify' => false ]);
$response = $client->get($image_url);
$s3 = new Aws\S3\S3Client([
  'version'   => 'latest',
  'region'    => 'eu-west-1',
  'signature_version' => 'v4'
  )        
]);

$s3->putObject([
  'Bucket'        => '<BUCKET NAME HERE>',
  'Key'           => $key,
  'ContentLength' => get_headers($image_url,1)['Content-Length'],
  'ContentType'   => 'image/png',
  'Body'          => $response->getBody(),
  'ACL'           => 'private-write',
]);

目前,我得到了这个错误:PHP致命错误:未捕获的Aws\Exception\凭据异常:从实例配置文件元数据服务中检索凭据的错误。(cURL错误7:(见https://curl.haxx.se/libcurl/c/libcurl-errors.html)http://169.254.169.254/latest/meta-data/iam/security-credentials/)中

任何帮助都是非常感激的。


共有1个答案

东方志尚
2023-03-14

这里的问题是,您在初始化S3客户端时没有传递凭据,即AccessKey和Secret Key。

$s3 = new Aws\S3\S3Client([
  'version'   => 'latest',
  'region'    => 'eu-west-1',
  'signature_version' => 'v4',
  'credentials' => [
            'key'    => 'access-key',
            'secret' => 'secret-key' ,
        ]
  )        
]);

如果要从文件传递AccessKey和SecretKey,而不是硬编码字符串,可以在此处检查接受的答案。

 类似资料:
  • 我上传一个文件到AmazonS3有问题。我开发了一个Grails RESTful服务,它使用AWS Java SDK生成预签名URL。当客户端上传一个文件时,它首先检索一个预签名的URL,然后使用这个将文件直接上传到我的S3 bucket。所以我有一个Grails服务,它创建了一个预签名的URL,如下所示...

  • 这里是我的node.js预签名URL的生成 那么我在URL生成或卷曲方面的问题在哪里呢?谢谢

  • 我有一个从AWS S3预先签署的上传网址上传视频文件。在邮递员上测试视频成功上传。然而,我得到一个403返回时,实施改造。我无法对此任务使用多部分上传。 服务调用: 上传: 我已经确保URL是正确的。内容类型标题也被添加,邮递员截图附后。得到403禁止错误 邮递员截图 我发现了这个相关的问题,但我仍然得到一个403。使用改造2 将文件上传到 AWS S3 预签名 URL 有什么建议吗?

  • 我试图使用angular客户端将文件上传到Amazon S3。我已经使用NodeJs应用服务器生成了一个预先签名的URL。在将文件上传到预先签名的URL时,我收到一个错误,如下所示: "对预检请求的响应没有通过权限改造检查:请求的资源上没有'Access-Control-Allow-Origin'标头。因此不允许访问Origin'http://localhost:4200'。" 我已将以下 COR

  • 问题内容: 我正在尝试使用预签名的URL将文件上传到Amazon的S3。我从生成URL的服务器获取URL,并将其作为JSON对象的一部分发送给我。我将URL作为字符串获取,如下所示: https://com-example-mysite.s3-us- east-1.amazonaws.com/userFolder/ImageName?X-Amz-Security- Token=xxfooxx%2F

  • 我知道使用以下方法限制对象的上载大小:http://doc.s3.amazonaws.com/proposals/post.html#limiting_uploaded_content 但是我想知道如何在服务器端以IAM用户的身份使用S3 SDK生成预签名url的同时完成。