我正试图将通过HTML表单提供的图像加载到Dynamo Db表中。
我正在对图像加载部分进行硬编码,但稍后我想取消注释:
$con=file_get_contents( basename($_FILES["fileToUpload"]["name"]) );
并将任何图像上传到DynamoDB。
这是html文件:
<form action="upload-download-dynamodb.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
这是上传-下载-发电机.php
<?php
// Convert image to binary
//$con=file_get_contents( basename($_FILES["fileToUpload"]["name"]) );
$con=file_get_contents("Tuan.jpg");
$en=base64_encode($con);
$mime='image/gif';
$binary_data='data:' . $mime . ';base64,' . $en ;
?>
<img src="<?php echo $binary_data; ?>" alt="Test">
<?php
// Connect to Dynamodb
require './awssdkphp/aws-autoloader.php';
use AwsDynamoDbDynamoDbClient;
$client = DynamoDbClient::factory(array(
'profile' => 'default',
'region' => 'us-east-1' // replace with your desired region
));
// Put item inside a table
$responsePut = $client->putItem(array(
'TableName' => 'saleItems',
'Item' => array(
'itemID' => array('N' => 11 ), // Primary
'picture' => array('B' => openssl_random_pseudo_bytes(5)),
'array' => array('S' => $en),
'description' => array ('S' => "picture description" )
)
));
?>
如果我在终端中运行"upload-download-dynoldb.php"代码,它会很好地工作(e.I.php upload-doownload-dynostb.php)。如果我在浏览器(Firefox)上执行"upload-download-dennostb.php",则会显示图像,但数据不会上传到Dynamo DB中的"saleItems"表中。
有什么想法吗?为什么当我通过终端执行图片时,"上传下载dynamodb.php"代码会将图片加载到dynamodb中,而当我在浏览器中执行时却不会加载(点击刷新按钮)?
顺便说一句,我授予了upload-download-dynoldb.html、upload-doownload-dynodb.php和Tuan.jpg的完全权限。
好吧,我终于弄清楚发生了什么。
我有我的证书作为环境变量在终端。出于某种原因,当我通过html文件执行upload-download-dynoldb.PHP时,PHP无法访问这些凭据。
我通过添加以下代码行将凭据硬编码到upload-download-dynoldb.php文件中:
use AwsCommonCredentialsCredentials;
$credentials = new Credentials('YOUR_ACCESS_KEY','YOUR_SECRET_KEY');
$client = DynamoDbClient::factory(array(
'profile' => 'default',
'region' => 'us-east-1', // replace with your desired region
'credentials' => $credentials
));
现在代码运行良好。