Медленные загрузки с Google Storage Bucket - PullRequest
0 голосов
/ 01 февраля 2019

У меня странная проблема с загрузкой файлов из Google Storage Buckets.

Если я работаю в Linux и запускаю этот код, для загрузки PDF-файла размером 64 КБ требуется 5 минут.

def generate_document(request):
    if not ensure_valid_user(request):
        return redirect('/?result=0')

    try:
        long_name = request.GET['long_name']
        short_name = request.GET['short_name']

        file_data, size = CloudStorageManager.get_file(long_name)

        response = HttpResponse(file_data, content_type='application/octet-stream')
        response['Content-Disposition'] = 'attachment; filename={}'.format(short_name)
        response['Content-Length'] = size

        return response

    except Exception as ex:
        print(ex)

Вот метод из CloudStorageManager класса, который важен:

class CloudStorageManager:
    # private key file, used for local testing
    storage_client = storage.Client.from_service_account_json(
        'CloudStorageAPIKey.json')

    bucket = storage_client.get_bucket("my.private.bucket")

    @staticmethod
    def get_file(long_name):
        bucket = CloudStorageManager.bucket
        blob = bucket.blob(long_name)

        file_string = blob.download_as_string()

        return file_string, blob.size

Что я потерял, так это то, что с Linux, если я закомментирую response['Content-Length'] = size из моего generate_document() метода загрузкипроисходит с нормальной скоростью, однако, когда я иду домой и вхожу в Windows с этой строкой комментария, загрузка занимает 5 минут снова и работает с включенной строкой.

Может кто-нибудь помочь объяснить, где я иду не так?

1 Ответ

0 голосов
/ 01 февраля 2019

Достаточно интересно

Я исправил проблему, присвоив Content-Length моего ответа от:

response['Content-Length'] = size

на

response['Content-Length'] = len(response.content)

...