J'ajout actuellement des photos au seau AWS et que l'URL S3 est enregistrée dans la base de données comme l'image ci-dessous:Comment passer d'AWS s3 à CloudFront
Maintenant, Je viens de créer un CloudFront Distribution depuis je crois que cela va accélérer la vitesse de retreving images. Cependant, pas depuis qu'une URL Cloudfront est générée automatiquement pour tout objet téléchargé dans mon compartiment, l'URL S3 doit être remplacée par l'URL Cloudfront lors de la diffusion des images. Et comment faire?
Je veux faire l'option 1:
Comme je pense que cela peut se faire soit en créant une autre colonne dans db pour l'URL CloudFront généré et de traction qui, encore je ne sais pas comment le faire?
ou l'option 2: Remplacez l'URL s3 de l'URL obtenue par l'URL cloudfront lorsque vous l'extrayez de la base de données.
Alors, quoi de mieux que de le faire fonctionner? J'ai besoin d'aide pour passer à CloudFront mais toujours mes données stockées dans le compartiment S3.
<?php
include "common.php";
include "aws.php";
try{
if ($_SERVER["REQUEST_METHOD"]=="POST"){
$conn=get_db_connection();
$post_id=$_REQUEST["post_id"];
//$form=R::findOne('answer','id=?',array($form_id));
//$formimage=R::dispense('formimage');
$url="";
if (isset($_FILES["media_file"]) && $_FILES["media_file"]["size"]>0){
$filename=$_FILES["media_file"]["name"];
$fullfilepath="admin/user_media/".$filename;
move_uploaded_file($_FILES["media_file"]["tmp_name"],$fullfilepath);
$emUrl = "http".(!empty($_SERVER['HTTPS'])?"s":"").
"://".$_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT']=='80'?"":(":".$_SERVER['SERVER_PORT'])).$_SERVER['REQUEST_URI'];
$codeUrl=dirname($emUrl)."/".$fullfilepath;
$url=$codeUrl;
$client = Aws\S3\S3Client::factory(array(
'version' => 'latest',
'region' => 'us-west-2',
'scheme' => 'http'
));
$pathToFile=$fullfilepath;
$bucket='2sale';
try{
$result = $client->putObject(array(
'ACL' => 'public-read',
'Bucket' => $bucket,
'Key' => time().'_'.$filename,
'SourceFile' => $pathToFile
)
);
$stCode=$result['@metadata']['statusCode'];
if ($stCode!="200"){
$result=array("status"=>400,"msg"=>"Error in uploading to s3: ".$stCode);
echo json_encode($result);
exit();
}
$url=$result['ObjectURL'];
unlink($fullfilepath);
}catch(Exception $e){
$result=array("status"=>400,"msg"=>"Exception in s3: ".$e->getMessage());
echo json_encode($result);
exit();
}
$query="INSERT INTO postimage(image_url,post_id) VALUES('".mysql_real_escape_string($url)."',".$post_id.")";
mysql_query($query,$conn);
$query="UPDATE posts SET image_url='".mysql_real_escape_string($url)."' WHERE id=".$post_id;
mysql_query($query,$conn);
}else{
$result=array("status"=>400,"msg"=>"Your image not uploaded to our script");
echo json_encode($result);
exit();
}
mysql_close($conn);
$result=array("status"=>200,"image_url"=>$url,"media_file" => $_FILES["media_file"]);
echo json_encode($result);
exit();
}
}catch(Exception $ex){
$result=array("status"=>400,"msg"=>"Global exception: ".$ex->getMessage());
echo json_encode($result);
exit();
}
?>
<body>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="media_file" />
<input type="text" value="1" name="post_id" />
<input type="submit" value="Submit" />
</form>
</body>
Tout dépend de la façon dont vous utilisez la table de base de données. Vous pouvez remplacer l'URL CloudFront à l'aide d'une fonction de remplacement de chaîne (facile, mais codée en dur) ou utiliser l'une ou l'autre de ces options. Ce n'est pas vraiment une question de programmation parce que vous demandez simplement une opinion, et votre opinion est la seule qui compte. –
JohnRetenstein: Je me demande quel code doit être fait dans mon code ci-dessus. –