2017-02-14 16 views
2

Google Cloud Storageで画像を切り抜いてアップロードしようとしています。この中で私は画像をアップロードし、それを取り戻して作物を作りました。私はそうするには、次の方法を使用していますバケットから画像を取得してユーザーにプレビューする方法

方法1:

$options = ['gs_bucket_name' => $my_bucket]; 
$upload_url = CloudStorageTools::createUploadUrl('/upload/handler', $options); 

theseドキュメントを使用しました。しかし、これで私はクラスが見つかりません。私は、例えばファイルを含めてみました:

require_once APPPATH."google/appengine/api/cloud_storage/CloudStorageTools.php"; 

$options = ['size' => 400, 'crop' => true]; 
$image_file = "gs://my_bucket/shiva.jpg"; 
$cloud_tools = new CloudStorageTools; 
$img = $cloud_tools->getImageServingUrl($image_file, $options); 

が、私はクラスIのAppEngineフォルダの下CreateEncodedGoogleStorageKeyRequestを確認ANSなど

use google\appengine\CreateEncodedGoogleStorageKeyRequest; 

が見つかりません取得します。私はそこに行方不明を見つけた。私は何が起こっているのか分からない。

方法2: 次のコードを使用してファイルをアップロードしようとしました。

function upload_user_image($image_file, $bucket_name = ''){ 
$client = google_set_client(); 
$storage = new Google_Service_Storage($client); 
$sfilename = $image_file['name']; //filename here 
$obj = new Google_Service_Storage_StorageObject(); 

$obj->setName($sfilename); 
$obj->setBucket("my_bucket"); //bucket name here 


$filen = $image_file['path']; 

$mimetype = mime_content_type($filen); 


$chunkSizeBytes = 1 * 1024 * 1024; 
$client->setDefer(true); 
$status = false; 

$filetoupload = array('name' => $sfilename, 'uploadType' => 'resumable'); 

$request = $storage->objects->insert("my_bucket",$obj,$filetoupload); 

$media = new Google_Http_MediaFileUpload($client, $request, $mimetype, null, true, $chunkSizeBytes); 
$media->setFileSize(filesize($filen)); 
$handle = fopen($filen, "rb"); 

while (!$status && !feof($handle)) { 
    $chunk = fread($handle, $chunkSizeBytes); 
    $status = $media->nextChunk($chunk); 
} 

$result = false; 
if($status != false) { 
    $result = $status; 
} 

fclose($handle); 
// Reset to the client to execute requests immediately in the future. 
$client->setDefer(false); 
return true; 

}

私は、コードの上に使用して画像をアップロードすることに成功しましたが、現在は画像を取得し、HTMLでそれをプレビューで立ち往生。 (私は画像をトリミングしてから再びアップロードしたい)。

方法:

$image = file_get_contents("https://storage.cloud.google.com/my_bucket/shiva.jpg"); 
echo $image; 

使用these docsそのため私は、次の試してみました。私は私のGoogleの資格情報を埋める私のHTMLのログインボックスを取得し、画像にリダイレクトされます。しかし、私のHTMLコードで画像のプレビューを取得しないでください。

方法B: Iは、these docsを用い

https://www.googleapis.com/storage/v1/b/my_bucket/o/shiva.jpg 

を試みました。

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "required", 
    "message": "Anonymous users does not have storage.objects.get access to object my_bucket/shiva.jpg.", 
    "locationType": "header", 
    "location": "Authorization" 
    } 
    ], 
    "code": 401, 
    "message": "Anonymous users does not have storage.objects.get access to object my_bucket/shiva.jpg." 
} 
} 

方法c:しかし、私は出力を得る を私は次の関数を使用して、それを試してみました:

function get_user_image($image_file){ 
    $instance = &get_instance(); 
    // $client = google_set_client(); 
    // $storage = new Google_Service_Storage($client); 
    $sfilename = $image_file; //filename here 

    $storage = new Google\Cloud\Storage\StorageClient(['projectId' => $instance->config->item('google_project_id')]); 
    $bucket = $storage->bucket('my_bucket'); 
    $object = $bucket->object($sfilename); 

    $stream = $object->downloadAsString(); 
    $im = imagecreatefromstring($stream); 
    if ($im !== false) { 
    header('Content-Type: image/png'); 
    imagepng($im); 
    imagedestroy($im); 
    } 
    else { 
    echo 'An error occurred.'; 
    } 
} 

私は最後の3日間あちこちに立ち往生していますthese docs

を使用します。私はhtmlでユーザーにイメージを表示する必要があります。私が逃しているものは誰でも案内してくれますか?これを達成するための適切な方法を教えてください。

+0

方法Cでどのようなエラーがありましたか? –

+0

こんにちは@BrandonYarbroughさん、ありがとうございました。メソッドCの場合は、ブラウザウィンドウにイメージを表示できますが、htmlでは表示できません。htmlでは、この '画像/ファイルにはエラーが含まれていると表示できません。 'というメッセージが表示されます。ところが、この関数を呼び出した後に 'exit()'を実行すると、それは私にイメージを表示します。 – MKB

+0

これらの画像は匿名で閲覧できますか?なぜ単にのような基本的なイメージを使うのですか? –

答えて

1

あなたは、これらのオブジェクトは匿名で見えているに慣れているので、ウェブサイト上の画像として表示する最も簡単な解決策は、公的にアクセス可能にそれらをマークすると、そのようにのようにHTMLでそれらを埋め込むために、単純に次のようになります。

<IMG SRC="https://storage.googleapis.com/BUCKET_NAME/imageName.jp‌​eg" /> 
+0

ちょっと@brandon今、私はそれを切り取ってイメージをバケットにアップロードしようとしています。しかし、切り取った画像をアップロードしようとすると、「HTTPラッパーは書き込み可能な接続をサポートしていません」というエラーが表示されます。私は何が起こっているのか理解できません。なぜこのエラーが発生するのですか?このエラーを解決するために私を助けてくださいますか? – MKB

+0

HTTP URLでfile_put_contentsを使用しているようですね? –

+0

いいえ私は 'imagejpeg($ file_content、$ destination_path)'関数を使用しています。このエラーが発生しています。コピー先のパスがクラウドストレージから取得しているパスと同じ場合。 – MKB

関連する問題