2016-03-30 14 views
0

Başka bir sunucuya tornadoweb 'dan uploader oluşturdu. Ben beklemek zorunda nedenle tüm yükleme işlemi başka url (ShowQueue sınıfı) erişmek için bitmiş kadar uyumsuz tüm süreci engelleme olmadan bu ben yükleyici çalışması oluşturmak yapmak nasıl kodtornadoweb başka bir sunucu kilitleme işlemine yükleniyor

def create_callback(encoder,fileurl): 
     encoder_len = encoder.len 
     queueupload[fileurl] = {} 
     queueupload[fileurl]["size"] = encoder_len 

     def callback(monitor): 
      queueupload[fileurl]["current"] = monitor.bytes_read 
      # print queueupload 
      # bar.show(monitor.bytes_read) 
     return callback 

class ShowQueue(tornado.web.RequestHandler): 
    @gen.coroutine 
    def get(self): 
     self.write(tornado.escape.json_encode({'success':True,'queuelist':queueupload})) 

class UploadFile(tornado.web.RequestHandler): 
    @gen.coroutine 
    def get(self): 
     fileurl=self.get_argument("fileurl", None) 
     taxo=self.get_argument("taxonomi", None) 
     try: 
      filename = fileurl.split("\\")[-1] 
      # print filename 
      encoder = MultipartEncoder({ 
       'taxonomi': taxo, 
       'myFile': (filename, open(fileurl, 'rb'), 'text/plain'), 
       }) 

      callback = create_callback(encoder,fileurl) 
      monitor = MultipartEncoderMonitor(encoder, callback) 
      if(taxo!=""): 
       arrtaxo = taxo.split("/") 
       taxo = ":".join(arrtaxo) 
       taxo = "/"+taxo 
      r = requests.post('http://192.168.123.123:8080/upload'+taxo, data=monitor, 
           headers={'Content-Type': monitor.content_type}) 
      if fileurl in queueupload: 
       del queueupload[fileurl] 
      self.write(tornado.escape.json_encode({'success':True,'reason':r.json()})) 
     except Exception as e: 
      exc = 'Exception: %s %s' % (e, filename) 
      self.set_status(500) 
      self.write(json_encode({'success':False,'exception':exc})) 

olduğunu süreci engelleyebilecek ve hala kontrole sahip İptal (işlemi iptal etmek için henüz geri çağırma kullanıyorum ama henüz uygulanmadı)?

cevap

0

"İstekler" kitaplığı Tornado için oluşturulmamış; bu uyumsuz değil. yerine Tornado'nun kendi AsyncHTTPClient kullanın:

http://www.tornadoweb.org/en/latest/httpclient.html#tornado.httpclient.AsyncHTTPClient

http_client = AsyncHTTPClient() 
r = yield http_client.fetch(url, method="post", ...) 
+0

I f açık (FILEURL, 'r') ile kullanımı: gövde = f.read() yanıt = verim httpclient.AsyncHTTPClient() .fetch ('http://192.168.174.129:8080/upload'+taxo,method= "POST", başlıklar = {"İçerik Türü": "text/plain"}, body = {"myFile": body} fakat hata alıyorum İstisna: Beklenen bayt, unicode veya Yok; var –