首页 > 解决方案 > 使用 PHP 将文件上传到 Google Cloud Storage Bucket

问题描述

我进行了很多搜索(甚至发现了一些有用的链接,例如使用 PHP 和 Ajax 将文件上传到 Google Cloud Storage Bucket),但我无法让它工作。我需要将 txt 文件上传到我的谷歌云存储桶。

这是我的代码:

gcp_storage.php:

<?php

if(isset($_FILES['file'])){
    $errors= array();
    // Authentication with Google Cloud Platform
    $client = new StorageClient(['keyFilePath' => 'cloudtest-2412**-a66e94ba56**.json']);
    $bucket = $client->bucket('cloudtest-2412**.appspot.com ');

    // Upload a file to the bucket.
    $file = pathinfo($_FILES['file']['name']);
    $prefix = uniqid('prefix_', true); //generate random string to avoid name conflicts
    $filename = $prefix . "." . $file['extension'];

    $bucket->upload(
      fopen($_FILES['file']['tmp_name'], 'r'),
      ['name' => $filename]
    );  
}

?>

html和js:

<html>
<form id="fileForm" action="" method="post" enctype="multipart/form-data">
    <div class="form-row">
        <br/>
        <div class="form-group">
            <label for="textFile">Text File: </label>
            <br/>
            <input type="file" name="file" id="textFile">
        </div>
    </div>
    <br>
    <button type="submit" class="btn btn-lg btn-primary"> Upload </button>
</form>

</html>

<script
  src="https://code.jquery.com/jquery-3.4.1.min.js"
  integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
  crossorigin="anonymous"></script>

<script>

    $(document).on('submit', '#fileForm', function (e) {
    e.preventDefault();
    var data = new FormData($('#fileForm').get(0));
    $.ajax({
        type: 'POST',
        url: 'gcp_storage.php',
        data: data,
        processData: false,
        contentType: false,
        success: function ($data) {
            console.log('Succcess');
            $('#success').attr('hidden', false);
        }
    });
});

</script>

*它显示在我的控制台成功但是当我去谷歌云上的存储桶时,什么都没有出现......

*我从 IAM 页面下载了 .json 文件(该文件与其他文件位于同一目录中)

编辑1:

不知道这是否真的有帮助,如果我删除use Google\Cloud\Storage\StorageClient,PHP 会抛出错误Class 'StorageClient' not found in /base/data/home/apps/i(当我放回使用代码时,它只会抛出 500 错误,见下文)

我一直在更改代码并设置断点以查看是否找到 500 错误的来源。如果我从我的 PHP 文件中删除所有内容并放入echo "Test",它可以正常工作。

在原代码处打断点后,我发现500错误来自这行代码:

$client = new StorageClient(['keyFilePath' => 'cloudtest-2412**-a66e94ba56**.json']);
$bucket = $client->bucket('cloudtest-2412**.appspot.com');

(验证码)

有什么建议么?

谢谢

标签: javascriptphpjqueryajaxgoogle-cloud-storage

解决方案


我想,我们可以看到权限错误。在大多数情况下,内部 500 服务器错误是由于对一个或多个文件或文件夹的权限不正确。

请尝试以下步骤: https ://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application


推荐阅读