无法通过 Google Compute Engine 使用 PHP 在 Google 云存储上上传文件
Unable to upload files on Google Cloud Storage using PHP via Google Compute Engine
我正在尝试将图像文件上传到我在 GCS 中的存储桶,只在我的页面上插入了一个文件输入和一个按钮以进行一些测试,当我单击该按钮时,它没有执行任何操作,没有错误,没有什么。我在 Google Cloud Platform Compute Engine 中使用 Ubuntu 虚拟机。
实际上我无法使用 Google Cloud Storage Client 执行任何操作,无法上传对象、列出对象、列出存储桶,我已经将其上传到我的网站但它不起作用,首先在 localhost 上尝试但它给我这个错误:cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书,这就是我将其上传到 GCP 上的虚拟机的原因。
<?php
require_once __DIR__.'/vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
class googleStorage{
private $projectId;
private $storage;
public function __construct() {
//putenv("GOOGLE_APPLICATION_CREDENTIALS=/var/www/html/vendor/google/Cloud/credentials.json");
$this->projectId = 'my_project_id';
$this->storage = new StorageClient([
'projectId' => $this->projectId
]);
$this->storage->registerStreamWrapper();
}
function uploadObject($bucketName, $objectName, $source) {
$file = fopen($source, 'r');
$bucket = $this->storage->bucket($bucketName);
$object = $bucket->upload($file, [
'name' => $objectName
]);
printf('Uploaded %s to gs://%s/%s' . PHP_EOL, basename($source), $bucketName, $objectName);
}
public function listBuckets() {
$buckets = $this->storage->buckets();
foreach ($buckets as $bucket) {
echo $bucket->name() . PHP_EOL;
}
}
function listObjects($bucketName) {
$bucket = $this->storage->bucket($bucketName);
foreach ($bucket->objects() as $object) {
printf('Object: %s' . '<br>', $object->name());
}
}
function getImageUrl($bucketName, $objectName) {
return 'https://storage.cloud.google.com/'.$bucketName.'/'.$objectName;
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Bootstrap Select-->
<link rel="stylesheet" href="vendor/bootstrap-select/css/bootstrap-select.min.css">
<title>Document</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="foto" class="form-control">
<button type="submit" name="upload" class="form-control">Upload</button>
</form>
<?php
include "googleStorage.php";
$bucket = "my_bucket";
$storage = new googleStorage();
$storage->listBuckets();
$storage->listObjects($bucket);
$imageUrl = $storage->getImageUrl($bucket, 'stitch.jpg');
if(isset($_POST['upload'])){
$storage->uploadObject($bucket, $_FILES['foto']['name'], $_FILES['foto']['tmp_name']);
}
?>
</body>
</html>
要让 Compute Engine 虚拟机实例访问 Cloud Storage,请按照以下步骤操作:
- 转到Compute Engine
- 单击您的虚拟机实例
- 检查最底部的 Cloud API 访问范围。
注意:如果设置为允许默认访问,则必须更改通过以下步骤:
停止您的虚拟机并单击编辑
转到 Cloud API 访问范围
Select下面的选项:
一个。 允许完全访问所有 Cloud APIs,以访问所有 Cloud API,包括 Cloud Storage。
乙。 为每个 API 设置访问权限,只有选定的云 API 才有访问权限。
保存和Start/Resume你的虚拟机。
我正在尝试将图像文件上传到我在 GCS 中的存储桶,只在我的页面上插入了一个文件输入和一个按钮以进行一些测试,当我单击该按钮时,它没有执行任何操作,没有错误,没有什么。我在 Google Cloud Platform Compute Engine 中使用 Ubuntu 虚拟机。 实际上我无法使用 Google Cloud Storage Client 执行任何操作,无法上传对象、列出对象、列出存储桶,我已经将其上传到我的网站但它不起作用,首先在 localhost 上尝试但它给我这个错误:cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书,这就是我将其上传到 GCP 上的虚拟机的原因。
<?php
require_once __DIR__.'/vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
class googleStorage{
private $projectId;
private $storage;
public function __construct() {
//putenv("GOOGLE_APPLICATION_CREDENTIALS=/var/www/html/vendor/google/Cloud/credentials.json");
$this->projectId = 'my_project_id';
$this->storage = new StorageClient([
'projectId' => $this->projectId
]);
$this->storage->registerStreamWrapper();
}
function uploadObject($bucketName, $objectName, $source) {
$file = fopen($source, 'r');
$bucket = $this->storage->bucket($bucketName);
$object = $bucket->upload($file, [
'name' => $objectName
]);
printf('Uploaded %s to gs://%s/%s' . PHP_EOL, basename($source), $bucketName, $objectName);
}
public function listBuckets() {
$buckets = $this->storage->buckets();
foreach ($buckets as $bucket) {
echo $bucket->name() . PHP_EOL;
}
}
function listObjects($bucketName) {
$bucket = $this->storage->bucket($bucketName);
foreach ($bucket->objects() as $object) {
printf('Object: %s' . '<br>', $object->name());
}
}
function getImageUrl($bucketName, $objectName) {
return 'https://storage.cloud.google.com/'.$bucketName.'/'.$objectName;
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Bootstrap Select-->
<link rel="stylesheet" href="vendor/bootstrap-select/css/bootstrap-select.min.css">
<title>Document</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="foto" class="form-control">
<button type="submit" name="upload" class="form-control">Upload</button>
</form>
<?php
include "googleStorage.php";
$bucket = "my_bucket";
$storage = new googleStorage();
$storage->listBuckets();
$storage->listObjects($bucket);
$imageUrl = $storage->getImageUrl($bucket, 'stitch.jpg');
if(isset($_POST['upload'])){
$storage->uploadObject($bucket, $_FILES['foto']['name'], $_FILES['foto']['tmp_name']);
}
?>
</body>
</html>
要让 Compute Engine 虚拟机实例访问 Cloud Storage,请按照以下步骤操作:
- 转到Compute Engine
- 单击您的虚拟机实例
- 检查最底部的 Cloud API 访问范围。
注意:如果设置为允许默认访问,则必须更改通过以下步骤:
停止您的虚拟机并单击编辑
转到 Cloud API 访问范围
Select下面的选项:
一个。 允许完全访问所有 Cloud APIs,以访问所有 Cloud API,包括 Cloud Storage。
乙。 为每个 API 设置访问权限,只有选定的云 API 才有访问权限。
保存和Start/Resume你的虚拟机。