Невозможно удалить несколько объектов с пробелами и кириллицей в 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 для этого.

Другие вопросы по тегам