我正试图通过AWS PHP SDK将一个图像上传到我的S3 Bucket。对于我的EC2实例,我附加了一个角色,允许我的S3 Bucket使用PutObject和GetObject。因此,我不需要在创建S3Client时附加凭据。我还在学习。
这是我的PHP脚本:
<?php
require './aws/aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
use Aws\Credentials\Credentials;
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);
$filename = $_FILES['file']['name'];
try {
$result = $s3->putObject([
'Bucket' => 'bucket name',
'Key' => 'testimage1',
'Body' => $filename
]);
echo 'DONE';
} catch (Exception $e) {
echo $e;
}
我在这个表单中不断收到500个内部错误。显然错误发生在S3Client创建时,我不知道为什么。
进一步的探测证实,当我尝试实例化S3Client类时,会抛出500内部错误。我能够从CLI访问S3存储桶,但无法使用AWS PHP SDK这样做。
有人能在这方面提出建议吗?谢谢你的阅读。
我解决了它,但我用了作曲家。这里有一个分步指南。
这是在假设您已创建具有完全S3访问权限或至少附加PutObject策略的IAM角色,并且IAM角色附加到EC2实例的情况下进行的。另外,您的EC2实例已经安装了一个web服务器。
/var/www/html
(您的Web服务器托管您的网页的文件夹)中,按照此处的指导在您的项目文件夹中安装作曲家。为了方便起见,我选择全局安装作曲家。yum install php-xml
并重新运行AWS PHP SDK的安装。这是我上传的代码,我的供应商文件夹是根级别的php文件,用于将文件上传到S3 bucket。
require 'vendor/autoload.php';
use Aws\S3\S3Client;
try{
$sharedConfig = [
'region' => 'us-east-1',
'version' => 'latest'
];
$sdk = new Aws\Sdk($sharedConfig); /*Instantiate SDK class with configs for API use*/
$s3Client = $sdk->createS3(); /*creates the S3 Client for API use*/
$file_name = $_FILES['file']['name']; /*file name e.g. name.jpg */
$file_tmp_name = $_FILES['file']['tmp_name']; /*!!! IMPORTANT - this is what you need to supply the SourceFile to properly upload the file*/
$file_type = $_FILES['file']['type']; /*file type*/
/*print_r($_FILES['file']);*/
$result = $s3Client->putObject([
'Bucket' => 'bucket-name',
'Key' => 'testimage.jpg',
'SourceFile' => $file_tmp_name,
'ContentType'=>$file_type,
'ContentDisposition'=>'attachment'
]);
echo "FILE SENT";
}catch(Exception $e){
echo $e;
}
根据文档,S3Client类的使用如下:https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_configuration.html
use Aws\S3\S3Client;
$options = [
'region' => 'us-east-1',
'version' => '2006-03-01',
'signature_version' => 'v4'
];
$s3Client = new S3Client($options);
它还表示,“我们不建议在生产应用程序中使用最新版本,因为引入包含API更新的SDK的新次要版本可能会破坏您的生产应用程序。”
我目前正在做一个个人项目,我想上传一张个人资料图片到我的服务器上。通过以表单数据的形式发送图像,我可以轻松地将图像发送到带有postman的服务器上,但当我对其进行相同的改造时,它不起作用,有时它会创建一个1kb的文件,在打开时显示错误。 如果我提供文件到请求Body.create喜欢, 设置新配置文件pic的代码不会执行,如果我只传递URI。getPath()输入。create()方法id在服务
问题内容: 我正在使用MEDIUMBLOB将图像存储在DB中。当我尝试通过servlet加载图像时,可以看到这些图像。但是,如果图像很大(1 MB或更大),我可以在浏览器中看到一半或3/4的图像。 当我下载相同的图像并将其放在公共Web内容中时,它可以完美运行。任何想法如何克服这个问题?我需要在servlet或MySQL中设置任何变量吗? (由JSF生成的)HTML代码如下: 图像servlet执
遇到了一个奇怪的问题,试图通过模型内的url从这里下载任何照片->https://jsonplaceholder.typicode.com/photos,例如“https://via.placeholder.com/150/92c952”,但得到错误: 另外,如果我试图从其他链接加载图像,例如->https://avatars.mds.yandex.net/get-pdb/1088712/8b19
我正在尝试上载文件,但无法工作: 有用信息:运行IIS Express(使用PHP5.3)-Windows 7 Professional 32位 代码: move_uploaded_file($_FILES[图像][名称],/图像/。$_FILES["Imagem"]["name"])或die("Error:".print_r($_FILES)); 它打印:数组([imagem]= 我确信路径是正
我一直在尝试使用graph API将文件上传到一个频道。我可以使用请求https://graph.microsoft.com:443/v1.0/me/drive/root:/filename:/content成功上载到我的个人OneDrive 但是,我无法上传到一个频道。我尝试了很多组合,但不断得到invalidrequest。以下是我尝试过的一些请求: XX:xxxxxxxxxxxxxxxxxx
我正在通过我的Rails4应用程序中的CarrierWave将图像上传到AWS3的桶中。我也有Cloudfront设置,它目前为我的所有statis资产提供服务(不包括公共上传)。 我如何通过Cloudfront而不是S3服务上传的图像,即使它们存储在S3桶中?我已经找到了这样的教程,但是由于我已经有一个CloudFront发行版在运行,我想知道是否应该为我的公共映像上载添加另一个,或者有没有一种