2010-09-29 3 views
1

J'essaie de télécharger un fichier sur le stockage Google, mais mon code se fige et ne répond pas. Aidez-moi, s'il vous plaît.google storage api mettre le problème de fichier en python

mycode:

def PutFile(self,filename): 
    conn = httplib.HTTPConnection("%s.commondatastorage.googleapis.com" % self.bucket) 
    conn.set_debuglevel(2) 

    dd = "%s" % datetime.datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT") 
    strToSign = "PUT\n"+"\nimage/jpeg\n"+dd+"\nx-goog-acl:public-read\n/%s/x.jpg" % self.bucket 
    f = open(filename,"r") 
    m = hashlib.md5() 
    m.update(f.read()) 
    h = m.hexdigest() 
    sig = base64.b64encode(hmac.new(self.secret, strToSign, hashlib.sha1).digest()) 
    total = os.path.getsize(filename) 

    header = {"Date":dd,"x-goog-acl":"public-read","Content-MD5":h,'Content-Length':total,'Content-Type':'image/jpeg','Authorization':"GOOG1 %s:%s" % (self.key,sig)} 


    r1 = conn.getresponse() 
    print r1.status, r1.reason 
    print r1.read() 
    conn.close() 
+0

Sur quelle ligne-t-il gèle? –

+0

r1 = conn.getresponse() ligne est geler –

Répondre

2

je me résoudre mon problème :) mon code:

 conn = httplib.HTTPConnection("mustafa-yontar.commondatastorage.googleapis.com") 
     conn.set_debuglevel(2) 
     f = open(filename,"r") 
     m = hashlib.md5() 
     m.update(f.read()) 
     h = m.hexdigest() 
     has = h 
     dd = "%s" % datetime.datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT") 
     strToSign = "PUT\n"+h+"\n\n"+dd+"\nx-goog-acl:public-read\n/mustafa-yontar/x.jpg" 

     sig = base64.b64encode(hmac.new(self.secret, strToSign, hashlib.sha1).digest()) 
     total = os.path.getsize(filename) 

     header = {"Date":dd,"x-goog-acl":"public-read","Content-MD5":h,'Content-Length':total,'Authorization':"GOOG1 %s:%s" % (self.key,sig)} 

     conn.putrequest('PUT', "/x.jpg") 
     for h in header: 
      conn.putheader(h, header[h]) 
     conn.endheaders() 
     bytess = open('x.jpg', 'rb').read() 
     f = StringIO(bytess) 
     f.seek(0) 


     while True: 
      bytes = f.read(1024) 
      if not bytes: break 

      length = len(bytes) 
      conn.send('%X\r\n' % length) 
      conn.send(bytes + '\r\n') 
     conn.send('0\r\n\r\n') 

     #errcode, errmsg, headers = conn.getresponse() 
     #h.close() 


     #conn.request("PUT","/mustafa-yontar/x.jpg",f.read(),header) 
     r1 = conn.getresponse() 
     print r1.status, r1.reason 
     print r1.read() 
     conn.close() 
     print has 
0

Je sais que c'est un peu plus d'un commentaire que d'une réponse à votre question, mais je mets cela dans une réponse parce que je ne peux pas encore de commentaire.

Il serait vraiment utile si vous pouviez affiner l'endroit dans votre fonction où il se bloque. Bien que l'ajout de print fonctions/instructions changera légèrement l'état de la mémoire, cela pourrait valoir la peine d'être essayé ici, car les appels réseau que vous effectuez sont une source probable d'accrochage. Egalement - vous semble simple, mais êtes-vous sûr que vous êtes sur le réseau et que vous avez accès au site de stockage Google?

+0

je suis accéder au site de stockage google et obtenir methots pas de problème. –

+0

Est-il possible d'obtenir une sortie plus verbeuse de la connexion HTTP? Peut-être en jetant un drapeau verbeux ou de journalisation? Vous pouvez également demander à un analyseur de réseau comme WireShark d'essayer de voir ce qui se passe réellement dans et hors de votre machine lorsque vous exécutez le programme/script. – dtlussier

+0

je regarde http analayzer une demande et je vois la réponse d'attente. Je suis ajouté à ma capture d'écran de sortie –

Questions connexes