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

如何为AWS S3图像添加Http接收器

阚允晨
2023-03-14

这是我的代码

function s3UploadImage($tmpFile,$file) {
     $tmpLoc=$bucket.$file;
    $s3 = new S3(awsAccessKey, awsSecretKey);
    $s3->putBucket($bucket, S3::ACL_PUBLIC_READ);
    if($s3->putObjectFile($tmpFile, $bucket , $tmpLoc, S3::ACL_PUBLIC_READ, array(
                 "Cache-Control" => "max-age=94608000",
                 "Expires" => gmdate("D, d M Y H:i:s T", 
                              strtotime("+3 years")),$contentType) )
    {
        $msg = "S3 Upload Successful.";
    //  $s3file='https://xxxxxxxxxxxxx.xxxxxxx/'.$tmpLoc;
    $s3file='https://xxxxxxxxxxxxxxx.xxxxxxx/'.$tmpLoc;
//              echo "<img src='$s3file'/>";
                echo 'S3 File URL:'.$s3file;
        $status=true;
    }
    else{
        $msg = "S3 Upload Fail.";
        $status=false;
    }
    return $status;
}

在此代码中,我添加了数组(“缓存控制” =

  x-amz-meta-cache-control  public,max-age=31536000
    x-amz-meta-expires  Wed, 11 Dec 2017 10:47:59 GMT 

在谷歌页面速度测试工具中,仍然显示过期未指定,但如果我使用s3浏览器等工具在s3中直接添加http头。它工作正常。它是这样添加的

Expires Wed, 15 May 2019 20:00:00
Cache-Control   max-age=31536000, public

使用api如何像这样添加http头。

共有2个答案

潘泰
2023-03-14

我也有同样的问题。我这样解决了这个问题,检查下面的代码

$metaHeaders = array();
$requestHeaders['Cache-Control'] = 'public, max-age=31536000';
$requestHeaders['Expires'] = gmdate("D, d M Y H:i:s T", strtotime("+1 years"));


 if($s3->putObject($tmpFile, $bucket , $tmpLoc, S3::ACL_PUBLIC_READ, $metaHeaders, $requestHeaders) 

使用< code>putObject方法而不是< code>putObjectFile方法,并设置< code>$requestHeaders此方法有效

黄查猛
2023-03-14

在这里,您添加的标头类似于自定义元数据。在创建自定义元数据时,您的 SDK 将附加 x-amz-元 - 以及您的元数据键来识别它。您必须将此标头设置为:

$result = $s3->putObject(array(
    'Bucket'       => $bucket,
    'Key'          => $keyname,
    'SourceFile'   => $filepath,
    'ContentType'  => 'text/plain',
    'Expires'      => 'Wed, 15 May 2019 20:00:00',
    'CacheControl' => 'max-age=31536000, public',
    'ACL'          => 'public-read',
    'StorageClass' => 'REDUCED_REDUNDANCY',
    'Metadata'     => array(    
        'param1' => 'value 1',
        'param2' => 'value 2'
     )
));
 类似资料:
  • 正如你在下面的代码片段中看到的,我很难让蓝色覆盖贴在图像上,但是正如你所看到的,在左侧,由于某种原因,它没有贴在图片上。是的,我希望一整列的位置比另一列低/高一点,所以这里我尝试将整列1定位70px,但它撕裂了蓝色覆盖层和图像。有什么想法吗? null null

  • 问题内容: 问题答案: 您必须向JLabel提供一个实现(即)。您可以通过方法(如您的问题)中的方法或通过构造函数来执行此操作: 我建议你阅读的Javadoc ,和。另外,您可以查看“ 如何使用标签教程 ”以获取更多信息。

  • 问题内容: 最近8个小时我一直在阅读文档,但没有发现任何可以帮助我的东西。大概是,但是没有代码在工作,因为它一直说“找不到图像URL”并引发异常。但是我还有其他项目,从来没有这个问题。 因此,有一个类包含这样的月份: 到目前为止,一切都很好。我什至可以在控制台中对其进行测试,并且效果很好,并且可以按值排序。现在,当我尝试从资源中添加图像时,出现了我之前提到的问题:找不到URL。但是,我只能使用图像

  • 我是第一次开发颤振应用程序。。我在添加图像时遇到问题。我有以下问题: 在哪里创建图像文件夹? 在哪里添加资产标签pubspec.ymal? 这需要任何资产文件夹吗? 我所尝试的: 在pubspec内部。ymal: 完整文件: 错误日志: 我的主菜。dart代码: 我指的是这个教程https://flutter.io/tutorials/layout/ 此外,我想问,有没有在颤振清洁重建的工具,因为

  • 你可以将图像(BMP、JPG、JPEG 或 PNG 文件)插入模型中以进行设计或标识模型。若要添加一个新的图像,点击工具栏的 “图像”按钮,并点击画布的任意位置。然后,在打开对话框中选择图像。 在画布中图像对象的弹出式菜单选项包括: 选项 描述 重设大小 重新设置图像的大小为它的原始大小。 重设高宽比率 保持图像的原始宽度与高度的比率。 剪切 从图表移除图像并放它在剪贴板。 复制 从图表复制图像到

  • 你可以将图像(BMP、JPG、JPEG 或 PNG 文件)插入模型中以进行设计或标识模型。若要添加一个新的图像,点击工具栏的 “图像”按钮,并点击画布的任意位置。然后,在打开对话框中选择图像。 在画布中图像对象的弹出式菜单选项包括: 选项 描述 重设大小 重新设置图像的大小为它的原始大小。 重设高宽比率 保持图像的原始宽度与高度的比率。 剪切 从图表移除图像并放它在剪贴板。 复制 从图表复制图像到