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でユーザーにイメージを表示する必要があります。私が逃しているものは誰でも案内してくれますか?これを達成するための適切な方法を教えてください。
方法Cでどのようなエラーがありましたか? –
こんにちは@BrandonYarbroughさん、ありがとうございました。メソッドCの場合は、ブラウザウィンドウにイメージを表示できますが、htmlでは表示できません。htmlでは、この '画像/ファイルにはエラーが含まれていると表示できません。 'というメッセージが表示されます。ところが、この関数を呼び出した後に 'exit()'を実行すると、それは私にイメージを表示します。 – MKB
これらの画像は匿名で閲覧できますか?なぜ単に
のような基本的なイメージを使うのですか? –