使用FTPlib上传200kb的html页面

时间:2013-11-08 17:55:23

标签: python python-2.7 ftplib

我正在使用以下代码将html文件上传到我的网站,但上传时似乎缺少一些数据......

我的内容是1930行,“长度”为298872(我想这是多少个字符)

## Login using the ftplib library and set the session as the variable ftp_session
ftp_session = ftplib.FTP('ftp.website.com','admin@website.com','password')

## Open a file to upload
html_ftp_file = open('OUTPUT/output.html','rb')
## Open a folder under in the ftp server
ftp_session.cwd("/folder")
## Send/upload the the binary code of said file to the ftp server
ftp_session.storbinary('STOR output.html', html_ftp_file )
## Close the ftp_file
html_ftp_file.close()

## Quit out of the FTP session
ftp_session.quit()

为什么不上传100%的文件?它的上传率为98%......

我一直在环顾四周,找不到最大字符数限制或最大文件大小是什么,可以通过上传部分来修复(我不知道该怎么做)

被动

*cmd* 'CWD /folder'
*resp* '250 OK. Current directory is /folder'
*cmd* 'TYPE A'
*resp* '200 TYPE is now ASCII'
*cmd* 'PASV'
*resp* '227 Entering Passive Mode (xxx,xxx,xxx,xxx,73,19)'
*cmd* 'STOR output.html'
*resp* '150 Accepted data connection'
*resp* '226-File successfully transferred'
*resp* '226 3.235 seconds (measured here), 48.23 Kbytes per second'
*cmd* 'QUIT'
*resp* '221-Goodbye. You uploaded 157 and downloaded 0 kbytes.'
*resp* '221 Logout.'

有效

*cmd* 'CWD /folder'
*resp* '250 OK. Current directory is /folder'
*cmd* 'TYPE A'
*resp* '200 TYPE is now ASCII'
*cmd* 'PORT xxx,xxx,xxx,xxx,203,212'
*resp* '200 PORT command successful'
*cmd* 'STOR output.html'
*resp* '150 Connecting to port 52180'
*resp* '226-File successfully transferred'
*resp* '226 4.102 seconds (measured here), 38.03 Kbytes per second'
*cmd* 'QUIT'
*resp* '221-Goodbye. You uploaded 157 and downloaded 0 kbytes.'
*resp* '221 Logout.'

2 个答案:

答案 0 :(得分:2)

从您的代码看起来您​​的FTP模式是二进制的,但您正在上传ASCII文件(html)。尝试将您的FTP模式更改为ASCII或首先压缩您的文件(这将是一个二进制文件),发送它然后在您的目的地解压缩。

以下是来自http://effbot.org/librarybook/ftplib.htm

的eaxmple
import ftp
import os

def upload(ftp, file):
    ext = os.path.splitext(file)[1]
    if ext in (".txt", ".htm", ".html"):
        ftp.storlines("STOR " + file, open(file))
    else:
        ftp.storbinary("STOR " + file, open(file, "rb"), 1024)

ftp = ftplib.FTP("ftp.fbi.gov")
ftp.login("mulder", "trustno1")

upload(ftp, "trixie.zip")
upload(ftp, "file.txt")
upload(ftp, "sightings.jpg")

答案 1 :(得分:1)

尝试以下操作,以二进制模式上传文件。诀窍是在调用storbinary之前将文件传输类型设置为二进制模式(TYPE I)。

with open('OUTPUT/output.html','rb') as html_ftp_file:
    # ftp_session.set_pasv(1) # If you want to use passive mode for transfer.
    ftp_session.voidcmd('TYPE I')  # Set file transfer type to Image (binary)
    ftp_session.cwd("/folder")
    ftp_session.storbinary('STOR output.html', html_ftp_file)