Невозможно удалить несколько объектов с пробелами и кириллицей в file_name с помощью REST API, облачное хранилище Google
Код моего пакетного удаления выглядит так:
@staticmethod
def gcs_batch_delete(gcs_file_names):
logging.debug('Deleting ' + str(len(gcs_file_names)) + ' files.')
boundary = '===============7330845974216740156=='
headers = {'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'}
data = '--' + boundary + '\n'
template = """Content-Type: application/http
DELETE /storage/v1/b/%s/o/""" % os.environ['GCS_BUCKET_NAME']
bodies = [template + urllib.quote_plus(filename) + '\n' for filename in gcs_file_names]
data += ('\n--' + boundary + '\n').join(bodies)
data += '\n--' + boundary + '\n'
logging.debug('Request:\n' + data)
url = 'https://www.googleapis.com/batch'
result = urlfetch.fetch(url=url, payload=data, method=urlfetch.POST, headers=headers)
logging.debug('urlfetch result: ' + str(result.content))
Поэтому, когда я удаляю несколько объектов, удаляются только файлы с латинскими символами и файлами, в имени которых нет пробелов. Но, кроме того, на сайте файлы исчезают, но не из облачного хранилища Google.
Ребята, вы можете помочь мне обновить этот код?:3
1 ответ
urllib.quote_plus заменяет пробелы на плюсы, но "+" является допустимым символом для имени объекта Google Cloud Storage, поэтому это не то, что вам нужно.
Попробуйте вместо этого использовать проценты (для пробела это%20). Вы можете использовать urllib.pathname2url для этого.