Как загрузить файл с локального диска в облачное хранилище Google? - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь загрузить файл Excel и pdf с локального диска в облачное хранилище Google. Excel создает с использованием библиотеки панд в Python. Когда я пытаюсь загрузить сгенерированный файл, он выдает эту ошибку

'ascii' codec can't decode byte 0xd0 in position 217: ordinal not in range(128) 

Я использую гибкий appengine. Вот код загрузки файла

def upload_to_gcs(file_path,file_name,file_type,bucket_name):
try:
    import google.cloud.storage
    storage_client = google.cloud.storage.Client.from_service_account_json(
        os.getcwd()+'relative_path_of_service_json_file')
    bucket = storage_client.get_bucket('bucket_name')
    d = bucket.blob(bucket_name+'/'+file_name+'.'+file_type)
    d.upload_from_filename(file_path)
except Exception, e:
        print str(e)

Заранее спасибо

1 Ответ

0 голосов
/ 10 ноября 2018

Ошибка говорит о том, что есть символ, который не может быть переведен в ASCII. Обычно такие ошибки появляются из-за специальных символов в имени файла или из-за того, как файл закодирован. Проверьте, есть ли какие-либо символы, с которыми у ASCII могут возникнуть проблемы, в файле или в имени файла.

Вот еще один вопрос StackOverflow о той же ошибке. В этом вопросе OP использует команду gsutil, но в конце клиентская библиотека Python и команда делают одно и то же, вызывают Cloud Storage API , поэтому решение может быть одинаковым для обоих .

Другие ответы SO на подобные ошибки решают решения программно. Использование decode("utf-8") или decode(encoding='unicode-escape'). Эти решения также могут помочь в вашем случае, вы должны попробовать их.

Если вы все еще не можете найти основную причину проблемы, попробуйте загрузить файл напрямую через API . Таким образом, вы можете проверить, сохраняется ли проблема, не используя клиентскую библиотеку Python.

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