私は現在、AWS S3バケットにし、S3のURLが示され、以下の画像のようにデータベースに保存されていることを写真をアップロードしています:CloudFrontの
は、今私はちょうどCloudFrontを作成私はそれが画像のレットレイトのスピードを高めると信じて以来、配布。ただし、バケツにアップロードされたオブジェクトに対してCloudfront URLが自動的に生成されるわけではありません。S3 URLは、画像を提供する際にCloudfront URLに置き換える必要があります。
私はオプション1のいずれかやりたい:私はそれが生成さCloudFrontのURLのDB内の別の列を作成し、まだ私はそれを行う方法を知らない、という引っ張っていずれかで行うことができると思うと同様
を?
またはオプション2:取得したURLのs3 URLをデータベースから取得するときに、クラウドフロントURLに置き換えます。
私はCloudFrontに切り替えるのに助けが必要ですが、私のデータは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>
これは、すべてのデータベース・テーブルを使用している方法によって異なります。あなたは、文字列置換機能(簡単だがハードコーディングされた)を使用してCloudFront URLを置き換えることができます。あなたが単に意見を求めているだけなので、これは実際プログラミングの質問ではなく、自分の意見だけが重要です。 –
JohnRetenstein:私の上記のコードで何がハードコードされている必要があるのだろうか。 –