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)これは、データが常にファイルの名前を含む文字列であることを意味していると思います。を使用して、これを開いている fileobj に変更してみてくださいdata = open(os.path.basename(dataname), 'rb')

編集

andを見るPySide.QtNetwork.QFtp.put(data, file[, type=Binary])PySide.QtNetwork.QFtp.put(dev, file[, type=Binary])- 引数の順序はdata/devで 、次に file です- したがって、コードでは間違った方法です...

于 2012-07-16T19:30:46.743 に答える