PHP, ajax, HTML форма для загрузки файла в облачное хранилище Google - PullRequest
0 голосов
/ 02 апреля 2020

Я видел кучу вопросов, задающих одно и то же, но я не могу понять, в чем здесь проблема. Я пытаюсь загрузить файл в Google Cloud Storage через PHP, ajax и HTML:

PHP Файл

<?php
require_once 'vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;

if(isset($_FILES['file'])){
    $errors= array();
    // Authentication with Google Cloud Platform
    $client = new StorageClient(['keyFilePath' => 'qpack-325-13-9bc27ee4320d.json']);
    $bucket = $client->bucket('qpack-13-img');

    // Upload a file to the bucket.
    $bucket->upload(
    fopen($_FILES['file']['tmp_name'], 'r')
    );
}

?>

JQuery / Ajax:

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script>
    $(document).on('submit', '#imageUpload', function (e) {
    e.preventDefault();
    var data = new FormData($('#imageUpload').get(0));
    $.ajax({
        type: 'POST',
        url: 'config.php',
        data: data,
        processData: false,
        contentType: false,
        success: function ($data) {
            console.log('Succcess');
            $('#success').attr('hidden', false);
        }
    });
  });
  </script>

И HTML:

<form id="imageUpload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">Use this photo</button>
</form>

Но это не сработает! Он не выдает никаких ошибок, ajax Журналы вызовов «Успех», но ничего не загружается в корзину. Я дал разрешения для всех пользователей Storage Object Viewer, и я тестирую его при развертывании, и все еще ничего. Я что-то упустил, потому что, похоже, не могу понять это.

Я подумал, что, может быть, это как-то связано с app.yaml, поэтому я включил его сюда:

runtime: php
env: flex

runtime_config:
  document_root: .

# [START gae_flex_storage_yaml]
env_variables:
  GOOGLE_STORAGE_BUCKET: "***"
# [END gae_flex_storage_yaml]

1 Ответ

0 голосов
/ 02 апреля 2020

Вы упомянули, что вы дали разрешения Storage Object Viewer, но их недостаточно для создания файлов в вашем хранилище. Если вы посмотрите документацию Разрешения на объекты , вы можете проверить, что вы должны использовать storage.objects.create для создания файлов, также может быть интересно рассмотреть вопрос о предоставлении разрешений storage.objects.update и storage.objects.delete в зависимости от потребностей приложения.

ПРИМЕЧАНИЕ : возможно, на фоне происходит ошибка и быть пойманным или обработанным как-то, но состояние успеха в любом случае выбрасывается на ваш AJAX звонок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...