Проблема с библиотекой облачного хранилища python ТОЛЬКО при загрузке изображений

Мне удалось успешно прочитать/записать файлы (xls) в корзину, которую я создал с помощью приложения App Engine, работающего в GAE. Однако, когда я пытаюсь сделать то же самое для файлов изображений, это дает ошибку:

'Время ожидания запроса к Google Cloud Storage истекло', DownloadError('Невозможно получить URL-адрес: https://storage.googleapis.com/parse_scratch/TTM150 MSM63 04504.jpg',)

Пожалуйста помоги.


В ответ на вопрос Бенсона ответ (вместе с кодом, который я использовал) приведен ниже:

Индивидуальные размеры файлов:

Менее 400 КБ (некоторые меньше 100 КБ) и одно изображение, которое я загрузил в GCS, которое я пытаюсь прочитать, просто вызвав gcs.open(fname, 'r'), составляет 22 КБ. Однако файлы xls, которые я пытаюсь прочитать из того же ведра (используя тот же код), составляют 5 МБ!

Код:

Что он делает: открывает zip-файл изображений, хранящихся в статическом файле моего Django Framework, читает через него файлы один за другим и пытается сохранить данные в GCS, используя gcs_write(). Аналогичный код (без просмотра zip-файла и попытки прочитать сохраненное изображение в GCS также не может прочитать, что приводит к той же ошибке, что и выше).

    zip = zipfile.ZipFile(join(IMAGEPATH, f), 'r')

    for imgwpath in zip.namelist():
        if not (('.jpg' in imgwpath) or ('.jpeg' in imgwpath) or ('.gif' in imgwpath)):
            continue

        full_name = imgwpath.split('/')
        image_name = full_name[len(full_name)-1]

        data = zip.read(imgwpath)
        if '.jpg' or '.jpeg' in image_name:
            type = 'jpeg'
        elif '.gif' in image_name:
            type = 'gif'

        filename = BUCKET + image_name
        gcs_file = gcs.open(filename, 'w', content_type = 'image/jpeg')
        gcs_file.write(data)
        gcs_file.close()

person user2243088    schedule 15.06.2013    source источник
comment
Насколько велики файлы изображений, которые вы пытаетесь записать?   -  person Benson    schedule 16.06.2013
comment
К какой строке вашего кода относится сообщение об ошибке?   -  person Benson    schedule 18.06.2013
comment
использование библиотеки gcs, я полагаю. Как видите, последние три строки ЕДИНСТВЕННЫ о GCS.   -  person user2243088    schedule 18.06.2013
comment
В журнале ошибок должно быть указано, в какой именно строке произошла ошибка. Было бы очень полезно иметь эту информацию.   -  person Benson    schedule 18.06.2013
comment
/base/data/home/apps/s~parsescratch/2.368182426280182786/cloudstorage/storage_api.py в do_request_async, строка 84   -  person user2243088    schedule 19.06.2013
comment
Спасибо, что поделились этим; не подскажете, какие карты в тексте вы вставили в строку 84?   -  person Benson    schedule 19.06.2013
comment
Дело в том, что исключение выдается в строке 84 storage_api.py, которая является библиотекой Python GCS (не мой код).   -  person user2243088    schedule 19.06.2013
comment
В качестве альтернативы, можете ли вы предоставить мне пример кода, который позволяет читать и записывать файлы изображений в GCS с помощью библиотеки GCS? Спасибо.   -  person user2243088    schedule 19.06.2013
comment
Бенсон, конкретно - это происходит, потому что я вызываю gcs_open()   -  person user2243088    schedule 19.06.2013
comment
Вы решили эту проблему? Я тоже вижу эту проблему в своем приложении.   -  person Rob Curtis    schedule 21.09.2013


Ответы (1)


Просто столкнулся с той же проблемой, поэтому я подумал, что отвечу на этот вопрос, если кто-то еще столкнется с этой проблемой.

Похоже, это из-за пробелов в имени файла.

При назначении имени файла я заменил пробелы символами подчеркивания, что, похоже, решило проблему:

    filename = BUCKET + image_name
    filename = filename.replace(" ", "_") 
    gcs_file = gcs.open(filename, 'w', content_type = 'image/jpeg')
    gcs_file.write(data)
    gcs_file.close()
person Rob Curtis    schedule 21.09.2013