2017-08-29 4 views
0

Je suis télécharger un fichier sur google stockage en nuage avec le rest apifichiers Uploading erreur avec la bibliothèque de demande de python pour le stockage en nuage Google

avec boucle cela fonctionne ok

curl -X POST --data-binary @[OBJECT] \ 
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \ 
    -H "Content-Type: [OBJECT_CONTENT_TYPE]" \ 
    "https://www.googleapis.com/upload/storage/v1/b/[BUCKET_NAME]/o?uploadType=media&name=[OBJECT_NAME]" 

mais avec des demandes de python publier le fichier est téléchargé corrompu

import requests 
filepath = '/home/user/gcs/image.jpg' 
url = 'https://www.googleapis.com/upload/storage/v1/b/****/o?uploadType=media&name=image.jpg' 
authorization = 'Bearer ******' 

headers = { 
    "Authorization": authorization, 
    "Content-Type": "image/jpeg", 
} 

with open(filepath, "rb") as image_file: 
    files = {'media.jpeg': image_file} 
    r = requests.post(url, headers=headers, files=files) 
    print(r.content) 
+0

Quelle est la taille du fichier que vous essayez de télécharger? – AllenMoh

+0

une image de 11,2 Ko – EdgarAlejandro

+0

try 'files = {'media.jpeg': image_fichier.read()}' – AllenMoh

Répondre

1

la méthode de téléchargement que vous appelez exige que le corps de la requête contient uniquement les données que vous téléchargez. C'est ce que fait l'option curl --data-binary. Cependant requests.post(files=BLAH) est multipart-encoding vos données, ce qui n'est pas ce que vous voulez. Au lieu de cela, vous souhaitez utiliser le paramètre de données:

with open(filepath, "rb") as image_file: 
    r = requests.post(url, headers=headers, data=image_file) 
    print(r.content)