Мой ответ имеет два решения.
Переименуйте объект с именем файла проблемы
- Войдите в консоль Google Cloud.
- Перейдите в хранилище.
- Выберите область, в которой находится файл.
- Выберите папку, в которой находится объект.
- В правой части объекта находится меню эллипса.
- Нажмите это меню и выберите Переименовать.
- Переименуйте объект.
Измените код
Я рассмотрелисходный код библиотеки google.cloud.storage
версия 1.20.0. Функция download_blob_to_file()
не поддерживает кодирование URL, когда первый параметр является строкой. Это работает для blob
объектов. Я включаю два разных метода, которые поддерживают ваши имена файлов.
Метод 1:
import sys
import urllib.parse
# Imports the Google Cloud client library
from google.cloud import storage
bucket_name = 'bucket-id'
object_name = '209146000/showphoto.aspx?photoid=12345.jpg'
outfile = 'test.jpg'
client = storage.Client()
bucket = client.get_bucket(bucket_name)
blob = storage.Blob(object_name, bucket)
client.download_blob_to_file(blob, open('test.jpg', 'wb'))
Метод 2:
import sys
from google.cloud import storage
bucket_name = 'bucket-id'
object_name = '209146000/showphoto.aspx?photoid=12345.jpg'
outfile = 'test.jpg'
client = storage.Client()
bucket = client.get_bucket(bucket_name)
blob = bucket.blob(object_name)
blob.download_to_filename(outfile)