【问题标题】:Accessing S3 storage from EC2 to store images and display images从 EC2 访问 S3 存储以存储图像和显示图像
【发布时间】:2016-05-10 02:23:58
【问题描述】:

第一次使用 AWS,我已经设置了我的 EC2 服务器和 RDS。我想使用 S3 存储从我的 EC2 服务器上的页面上传的图像,将图像路径保存在数据库中,然后在稍后显示带有 img 标记的图像。

我可以使用常规 VPS 轻松完成此操作,但不确定如何从我的 EC2 服务器中的 PHP 代码访问 S3 存储。

有什么建议吗?

【问题讨论】:

  • 无论代码是在 EC2 中还是在 AWS 生态系统之外的服务器中运行,访问 S3 的方式都相同。你问的是这个吗?
  • 我觉得我很困惑。通常在传统服务器中,我有一个存储项目的根目录。我只需创建一个 img 文件夹并存储图像,然后我可以使用路径 img/image.jpg 访问这些图像。 S3 是这样工作的吗?
  • S3 是 AWS 提供的对象存储服务,它不是您的本地文件系统。您保存到 s3 的每个对象都将获得一个 URN,该域名源自 AWS 域名。即使您的 EC2 实例已关闭,这些对象也始终可用。除了存储成本外,放置对象(每 1k PUT、LIST)和检索(每 10k GET)也会产生费用。在进入 S3 之前,您需要研究一下您的使用情况。

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


【解决方案1】:

当您使用 AWS 开发工具包创建新的 S3 对象时,它应该返回完整的 URL 以访问该图像。

像现在一样将成功创建新 S3object 时返回的 URL 保存到数据库中,然后使用现有的 PHP 代码将该 URL 从数据库中拉出以在 HTML 页面中显示它,这就是我假设你的样子目前正在以某种形式或另一种形式进行..

上传文件的示例PHP代码,设置权限为公开,并返回新上传文件的URL:

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';
// $filepath should be absolute path to a file on disk                      
$filepath = '*** Your File Path ***';

// Instantiate the client.
$s3 = S3Client::factory();

// Upload a file.
$result = $s3->putObject(array(
    'Bucket'       => $bucket,
    'Key'          => $keyname,
    'SourceFile'   => $filepath,
    'ContentType'  => 'text/plain',
    'ACL'          => 'public-read',
    'StorageClass' => 'REDUCED_REDUNDANCY',
    'Metadata'     => array(    
        'param1' => 'value 1',
        'param2' => 'value 2'
    )
));

echo $result['ObjectURL'];

【讨论】:

    猜你喜欢
    • 2020-12-22
    • 2020-10-05
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2020-09-07
    • 1970-01-01
    相关资源
    最近更新 更多