【问题标题】:can't push file to s3 buket in php无法将文件推送到 php 中的 s3 存储桶
【发布时间】:2022-01-07 07:23:25
【问题描述】:

我从 aws 文档中获取了示例代码,但我总是收到此错误:IncalculablePayloadException

<?php $filepath = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]";
    
    
    require 'aws.phar';
    
    use Aws\S3\S3Client;
    use Aws\S3\Exception\S3Exception;
    
    $s3Key = 'mykey';
    $s3Secret = 'mysecretkey';
    $region = 'eu-west-3';
    $s3Bucket = 'mybucket';
    
    
    $bucket = $s3Bucket;
    $file_Path = $filepath.'/msk.png';
    $key = basename($filepath);
    echo $file_Path;
    try {
        //Create a S3Client
        $s3Client = new S3Client([
            'profile' => 'default',
            'region' => $region,
            'version' => '2006-03-01',
            // 'debug'   => true
        ]);
        $result = $s3Client->putObject([
            'Bucket' => $bucket,
            'Key' => $key,
            'SourceFile' => $file_Path,
        ]);
    } catch (S3Exception $e) {
        echo $e->getMessage() . "\n";
    }

我已检查我的文件是否存在,路径是否正确。我不知道该怎么做,这应该可行,来自他们该死的医生。 我尝试过使用其他文件,在其他地方找到了不同的代码,但我总是遇到同样的错误。 感谢您的帮助。

编辑 --------- 1 我已将 $file_Path 更改为 $file_Path = 'msk.png'; 现在它正在“工作”。它将文件上传到 S3,但不是 png,而是 xml 文件。最后是

<Code>AccessDenied</Code>
<Message>Access Denied</Message>

知道为什么吗? 编辑 --------- 2 好的,现在我知道为什么了,文件的权限未设置为读取以供公共访问。如何使用 putObject 设置 ACL?

【问题讨论】:

  • 不应该$file_Path 是本地路径吗?我不知道 AWS。
  • 见鬼,就这么简单。我不知道我在哪里看到它需要绝对路径。谢谢@罗伯特
  • 现在它正在“工作”,但我在存储桶上的“png”不是 png 而是一个 xml 文件。有任何想法吗?

标签: php amazon-web-services amazon-s3 upload


【解决方案1】:

AWS PHP SDK DocumentationSourcePath 的描述:

要使用的磁盘上文件的路径,而不是 Body 参数。

但是您提供的不是磁盘上的文件,而是提供一个 URL

你有两个选择:

  • 根据路径在服务器上的位置提供路径的磁盘位置。例如,使用__DIR__ 来引用当前PHP文件的目录,它可能是$file_Path = __DIR__ . '/../public/msk.png';
  • 首先下载内容,并将其作为字符串传递给Body参数而不是SourcePath,例如使用$body = file_get_contents($File_Path);

如果它是您自己服务器上的文件,则第一个选项更有意义,但如果您简化了示例,则第二个选项可能有用。

【讨论】:

  • 感谢@IMSoP,我使用文件的相对 url 使它工作。但现在我在桶上的文件不是 png 而是 xml 文件。知道为什么吗?
  • 首先,重要的是要了解相对 URL 与磁盘上的路径相同,即使它们看起来非常相似;当您使用更复杂的设置时,将差异清晰地放在脑海中真的很有用。其次,您看到的 XML 文件可能是 S3 的错误页面。阅读它所说的内容,搜索该错误消息,如果遇到困难,请发布一个新问题(如 tour 中所述,此站点不像论坛那样运作,因此此评论提要不是正确的地方问这样的后续行动)。
  • 你好@IMSoP,谢谢,我听从了你的建议,提出了一个新问题。没错,这是由于存储桶设置导致的 S3 错误页面。
猜你喜欢
  • 1970-01-01
  • 2018-08-13
  • 2018-03-25
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多