1

Meine Batch löschen Code nicht gelöscht werden wie folgt aussieht:können mehrere Objekt mit Leerzeichen und Kyrillisch in file_name mit REST-API, Google Cloud Storage

@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)) 

Also, wenn ich mehrere Objekte löschen, seine nur Dateien löschen mit lateinischen Zeichen und Dateien, die keine Leerzeichen im Namen haben. Aber auch auf der Website verschwinden Dateien, aber nicht aus Google Cloud-Speicher.

Jungs, können Sie mir helfen, diesen Code zu aktualisieren? : 3

Antwort

2

urllib.quote_plus ersetzt Leerzeichen durch Pluszeichen, aber "+" ist ein gültiges Zeichen für einen Google Cloud Storage-Objektnamen. Dies ist also nicht das, was Sie möchten.

Probieren Sie stattdessen Prozent entkommen (für den Raum, das ist% 20). Sie können dazu urllib.pathname2url verwenden.