1

当我使用 QFTP 的 put 命令上传文件时,它只上传大约 40 个字节的指定文件。我正在捕捉 dataProgress 信号并且我正在获得进度,但文件的总大小仅读取为大约 40 个字节。我的代码有什么问题,还是 FTP 服务器方面的问题?

这是我的上传功能:

 def upload(self):
        filename = QFileDialog.getOpenFileName(self, 'Upload File', '.')
        fname = QIODevice(filename[0])
        dataname = filename[0]
        data = os.path.basename(dataname)
        #data = data[data.find("/") + 1:]
        print data
        print fname
        if not self.fileTree.currentItem():
            self.qftp.put(fname, data)
        elif "." in self.fileTree.currentItem().text(0):
            self.qftp.put(fname, self.fileTree.currentItem().parent().text(0) + data)
        elif self.fileTree.currentItem().text(0) == "/":
            self.qftp.put(fname, data)
        else:
            return

好吧,想通了我需要做什么。我需要创建一个 QFile 并从该文件中读取所有字节,然后将其传递给 put 命令。

def upload(self):
    filename = QFileDialog.getOpenFileName(self, 'Upload File', '.')
    data = QFile(filename[0])
    data.open(1)
    qdata = QByteArray(data.readAll())
    file = os.path.basename(filename[0])
    print data
    if not self.fileTree.currentItem():
        self.qftp.put(qdata, file, self.qftp.TransferType())
    elif "." in self.fileTree.currentItem().text(0):
        self.qftp.put(qdata, self.fileTree.currentItem().parent().text(0) + file)
    elif self.fileTree.currentItem().text(0) == "/":
        self.qftp.put(qdata, file)
    else:
        return
4

1 回答 1

0

我猜这data = os.path.basename(dataname)意味着数据总是一个包含文件名的字符串。尝试通过使用将其更改为打开的 fileobjdata = open(os.path.basename(dataname), 'rb')

编辑

查看PySide.QtNetwork.QFtp.put(data, file[, type=Binary])and PySide.QtNetwork.QFtp.put(dev, file[, type=Binary])- 参数的顺序是data/dev 然后是 文件- 所以它在你的代码中是错误的方式......

于 2012-07-16T19:30:46.743 回答