2011-10-27 41 views
1

我只需要使用QNetworkAccessManager在apache服务器上用PHP上传多个文件。QNetworkAccessManager:通过HTTP发布文件

我在这里问,因为我是新来的Python广告QT(PySide),我想知道是否有人有教程或代码示例(在Python中)演示这一点。

注意:如果这种内容不可用,我会尝试自己做,并在之后分享一个教程。

+1

使用Qt 4.8(和pyside 1.0.8),您可以使用[QHttpMultiPart(http://doc.trolltech.com/4.8/qhttpmultipart.html启动)。 – alexisdm

+0

我正在使用QT 4.7,但感谢链接:)! –

回答

3

不知道这是最好的方式,但它工作正常。

class Upload(): 
     def __init__(self): 
      self.url  = QUrl("http://www.website.com/up.php") 
      self.manager = QtNetwork.QNetworkAccessManager() 

     def sendRequest(self, replayfile): 
      self.request = QtNetwork.QNetworkRequest(self.url)    

      self.request.setRawHeader("Host", str(self.url.host())); 
      self.request.setRawHeader("Content-type", "multipart/form-data; boundary=AaB03x"); 

      fp = QFile(replayfile) 
      fp.open(QIODevice.ReadOnly) 
      bytes = QByteArray() 

      bytes.append("--AaB03x\r\n") 
      bytes.append("Content-Disposition: ") 
      bytes.append("form-data; name=\"replay\"; filename=\"" + QByteArray(str(QFileInfo(replayfile).fileName())) + "\"\r\n") 
      bytes.append("Content-Type: %s\r\n"%mimetypes.guess_type(str(replayfile))[0]) 
      bytes.append("\r\n") 
      bytes.append(fp.readAll()) 

      fp.close()  

      bytes.append("\r\n") 
      bytes.append("--AaB03x--") 

      contentLength = bytes.length() 
      self.request.setRawHeader("Content-Length", "%s" % contentLength)  

      self.manager.post(self.request, bytes) 

在PHP:

Array 
    (
     [replay] => Array 
      (
       [name] => test.SC2Replay 
       [type] => None 
       [tmp_name] => /tmp/phpK6tChh 
       [error] => 0 
       [size] => 9882 
      ) 

    )