0

Я недавно начал использовать google-cloud client, и я сделал этот маленький пример (я опустил/изменил вещи для наглядности):Как загрузить файл размером более 32 МБ в GCS с помощью клиента 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. Я видел solutions, используя API Blobstore, но они старые, и Blobstore даже не используется для хранения данных (хотя API Blobstore все еще можно использовать).

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

ответ

1

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

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

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

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

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

+0

API JSON звучит как отличное решение. Поэтому я думаю, что мне действительно не нужен этот клиент Google Cloud. Благодарю. –

+0

Привет, Хорхе, можете ли вы указать мне, как использовать JSON API через ajax для загрузки файла. Я читал документы весь день, но не нашел конкретного примера. Мне просто нужно подтолкнуть в правильном направлении. ура – Chez