Как я могу загрузить файл размером более 32 МБ в GCS с помощью клиента Google-Cloud?

Недавно я начал использовать клиент google-cloud и сделал небольшой пример (для ясности я пропустил / изменил некоторые параметры):

<form id="testform" method="post" enctype="multipart/form-data">
  <p>
    <div>
      <label for="fotos">Some file</label>
    </div>
    <div>
      <input type="file" name="testfile">
    </div>
  </p>
  <input type="submit" value="Submit">
</form>
from google.cloud import storage

class MyHandler(BaseHandler):
    def get(self):
        self.render("test.html")

    def post(self):
        file = self.request.POST["testfile"]
        filename = file.filename # + TimeStamp

        bucket = storage.Client().get_bucket(self.get_bucket_name())
        blob = bucket.blob(filename)

        blob.upload_from_string(data=file.file.read(),
                                content_type=file.type)

        self.write(blob.public_url)

Этот код прекрасно работает с чем-либо менее 32 МБ, но он не может обрабатывать большие файлы, потому что они проходят через приложение, а не напрямую в GCS. Я видел решения, использующие API Blobstore, но они устарели, и Blobstore даже больше не используется для хранения данных (хотя API Blobstore все еще можно использовать).

Так что мне было интересно, есть ли способ исправить это с помощью клиента Google-облако? Я не видел способ создания URL для загрузки в документах.

1 ответ

Решение

Клиент должен загрузить непосредственно в GCS. Одно соединение от GAE не может передавать более 32 МБ.

Это не должно быть проблемой для вас, потому что вы уже используете форму HTML. https://cloud.google.com/storage/docs/xml-api/post-object

Возможно, вам придется сделать корзину общедоступной в зависимости от того, какой доступ вам понадобится для вашего приложения. Иначе вам придется указать GoogleAccessId в PUT запрос генерируется на вашем бэкэнде и отправляется на фронтэнд заранее.

В конце страницы, указанной выше, приведен небольшой пример загрузки формы.

Наконец, я лично рекомендую использовать AJAX для загрузки вашего файла с помощью REST API https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload Это поможет вам легче обрабатывать ошибки, перенаправления и успешное выполнение.,

Другие вопросы по тегам