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

使用 AWS 开发工具包 PHP v2 上传() 时设置元数据的 Amazon S3 失败

夹谷飞龙
2023-03-14

使用AWS SDK PHP v2将文件上载到Amazon S3时,我在设置“Metadata”选项时遇到问题。我正在阅读的upload()方法的文档说明,第5个参数是一组选项。。。

*$options 执行命令时使用的自定义选项: - 参数:用于上传的自定义参数。这些参数必须映射到“启动多个部分上传”操作参数。- min_part_size:执行分段上传时允许每个上传的分段的最小大小。- 并发:最大并发分段上传数。- before_upload:在每次分段上传之前调用的回调。回调将收到一个带有上下文的咕噜\公共\事件对象。

我的< code>upload()代码如下所示..

$upload = $client->upload(
  '<BUCKETNAME>',
  'metadatatest.upload.jpg',
  fopen('metadatatest.jpg','r'),
  'public-read',
  array('Metadata' => array(
    'SomeKeyString' => 'SomeValueString'
  ))
);

…上传后没有设置元数据

但是,如果我使用此处记录的putObject(),我认为与上传()相比,这是一个“较低级别”的方法……

$putObject = $client->putObject(
  array(
    'Bucket' => '<BUCKETNAME>',
    'Key' => 'metadatatest.putobject.jpg',
    'Body' => file_get_contents('metadatatest.jpg'),
    'ACL' => 'public-read',
    'Metadata' => array(
      'SomeKeyString' => 'SomeValueString'
    )
  )
);

当我调用getObject()或使用putObject(

$getObject = $client->getObject(
  array(
    'Bucket' => '<BUCKETNAME>',
    'Key' => 'metadatatest.putobject.jpg'
  )
);

我更喜欢使用$客户端-

将文件、流或字符串上传到存储桶。如果上传大小超过指定阈值,则将使用并行多部分上传执行上传。

我不确定我错过了什么?


共有1个答案

栾和风
2023-03-14
匿名用户

如果您不进行多部分上传,使用上传()putObject()真的没有区别。您可以查看AWS PHP SDK源代码,但基本上上传方法只是像这样调用putObject

// Perform a simple PutObject operation
return $this->putObject(array(
    'Bucket' => $bucket,
    'Key'    => $key,
    'Body'   => $body,
    'ACL'    => $acl
) + $options['params']);

这在SDK文档中不是很清楚,但是您需要将最后一个参数作为带有< code>params键的数组发送,其值是带有< code>Metadata键和值的第二个数组,如下所示:

$upload = $client->upload(
    '<BUCKETNAME>',
    'metadatatest.upload.jpg',
    fopen('metadatatest.jpg','r'),
    'public-read',
    array('params' => array(
        'Metadata' => array(
            'SomeKeyString' => 'SomeValueString'
    )))
);

但是,我可以使用 putObject 调用来实现相同的目标。

 类似资料:
  • 尝试使用AWS JS SDK上传mp4文件并启动多部分上传,当我尝试下载并在本地播放时,我不断收到文件损坏错误。 我的代码要点: > 使用以下参数启动多部分上载: 打电话: 执行分块:参数: 读取文件: 上传每个区块: 最后完成multipartUpload: s3实例。completeMultipartUpload(完成MultipartParams,函数(错误,数据) 我猜问题是我如何读取文件

  • TL;DR:在运行? 我正在使用setupols构建我的第一个python包。我将要求指定为: 在开发过程中,我一直在安装软件包(在虚拟环境中),其中包括: 和卸载: 这个包使用entry_points来安装一些命令行脚本,所以这为我设置了命令,并允许我在测试命令的同时编辑这个包。 我还有一些用于开发的依赖项。。。sphinx扩展和其他一些东西(使用包不需要的东西)。我现在只是在虚拟环境中手动安装

  • 问题内容: 我正在使用KMS库使用AWS开发工具包。我想使用异步和等待而不是回调。 但是,当包装在异步函数中时,这是行不通的。 我如何使用异步并在这里等待? 问题答案: 如果您使用版本> 2.x的aws-sdk,则可以将a 转换为具有链功能的promise 。对于您的情况: 的是-回调的第二个参数(在回调风格)。 该是-回调FUNC的第一个参数 注意:表达式仅在异步函数中允许

  • 这里所说的开发工具,指的是前端开发使用的工具 一、浏览器调式工具 1、浏览器开发调式工具推荐三种 Google Chrome 推荐 ★★★★★ Firefox Firebug 推荐 ★★★★ Internet Explorer 推荐 ★★★ 2、说明: 以上是本人个人观点,当然,也是网上调查统计的结果。 使用Google Chrome开发者调式工具之前,我曾用过FireFox的Firebug调式工

  • 使用说明 概述 轻推JAVA-SDK是轻推开放平台面向Java开发者提供的发工具包。通过使用轻推JAVA-SDK,Java开发者可借助轻推高效地使用消息推送,安全登录等功能。 此文档面向Java开发者介绍轻推JAVA-SDK如何使用及相关注意事项。 使用步骤 步骤一:获取AppID以及AppSecret 登录轻推企业管理系统,编辑轻应用/订阅号,获取AppID以及AppSecret,若需要使用轻推

  • 问题内容: 我正在使用NodeJS AWS开发工具包生成预签名的S3 URL。该文档提供了一个生成预签名URL的示例。 这是我的确切代码(省略了敏感信息): 生成的URL如下所示: 我正在将该URL复制到浏览器中,并得到以下响应: 我知道水桶存在。当我通过AWS Web GUI导航至该项目并双击时,它会打开带有URL的对象,并且工作正常: 因此,我被认为是我使用SDK的方式一定做错了。 问题答案: