我不完全确定我理解你的意思,它在与你的应用程序相同的文件夹中查找,但这是我从基于 PHP 的 Web 应用程序读取/写入 S3 文件的方法:
1) 为您的应用程序创建一个新存储桶。此存储桶可以与管理您的 Elastic Beanstalk 项目的存储桶分开。
2) 在您的存储桶中,转到权限->存储桶策略并添加此策略以公开您的图像。 重要提示:将 BUCKET_NAME 替换为您的存储桶的实际名称
{
"Id": "Policy1397632521960",
"Statement": [
{
"Sid": "Stmt1397633323327",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::BUCKET_NAME/*",
"Principal": {
"AWS": [
"*"
]
}
}
]
}
Source
3) 使用 Amazon SDK 创建一个 composer.json 文件并替换为您想要的任何版本。将 composer.json 放在项目文件夹的根目录中。 (当您上传项目代码时,Elastic Beanstalk 会为您施展魔法,并将安装所有 composer 包)。
{
"require": {
"aws/aws-sdk-php": "3.27.1",
}
}
4) 将其包含在处理文件上传的 PHP 文件的顶部。
require __DIR__ . '/vendor/autoload.php';
use Aws\S3\S3Client;
5) 使用 AWS PHP 开发工具包创建一个 S3Client 对象。将 YOUR_KEY、YOUR_SECRET 和 YOUR_BUCKET_REGION 替换为正确的值。同样,将其添加到同一个文件中。
$client = S3Client::factory(
[
'credentials' =>
[
'key' => 'YOUR_KEY',
'secret' => 'YOUR_SECRET'
],
'region' => 'YOUR_BUCKET_REGION',
'version' => 'latest'
]
);
6) 现在终于,在完成了所有有趣的设置之后,当用户上传文件时,您可以将图像对象放入 S3 中。将 BUCKET_NAME 替换为您的存储桶的确切名称,将 FILE_NAME.JPG 替换为 S3 上的目标文件名,将 PATH/TO/TEMP_FILE.JPG 替换为在您的 Elastic Beanstalk 服务器上存储图像的临时路径。
$client->putObject([
'Bucket' => 'BUCKET_NAME',
'Key' => 'FILE_NAME.JPG',
'Body' => fopen('PATH/TO/TEMP_FILE.JPG', 'rb'),
'ACL' => 'public-read'
]);
7) 好的,这样处理文件写入。现在,一旦您想向用户显示上传的文件,您可以使用常规标签来执行此操作。同样,用正确的值替换所有大写的字段:
<img src="https://s3-YOUR_BUCKET_REGION.amazonaws.com/BUCKET_NAME/FILE_NAME.JPG" alt="My S3 image">
8) 您现在应该拥有一个对 Amazon S3 具有图像写入/读取功能的 Web 应用程序。