【问题标题】:How to Fix: Error uploading file: [WinError 10049] The requested address is not valid in its context如何修复:上传文件时出错:[WinError 10049] 请求的地址在其上下文中无效
【发布时间】:2021-06-07 07:13:01
【问题描述】:

我在上传文件到 FTP 服务器时遇到了错误:

[WinError 10049] 请求的地址在其上下文中无效。

我的 vsftpd.conf

listen=NO
listen_ipv6=YES
anonymous_enable=NO
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
allow_writeable_chroot=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
pasv_min_port=40000
pasv_max_port=50000
pasv_address=0.0.0.0
userlist_enable=NO
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

我的代码

def connect_ftp():
    ftp = FTP_TLS(timeout=20)
    ftp.connect('my_server', 21)
    ftp.auth()
    ftp.prot_p()
    ftp.login(user= 'pnhuong', passwd='76210119')
    ftp.set_pasv(True)
    ftp.cwd("/files")
    return ftp

def upload_file(ftp_connection, upload_file_path):
    try:
        upload_file1 = open(os.path.join(upload_file_path), 'r')
        print('Uploading ' + upload_file_path + "...")
        ftp_connection.storbinary('STOR ' + upload_file_path, upload_file1)
        ftp_connection.quit()
        ftp_connection.close()
        upload_file.close()
        print('Upload finished.')
    except Exception as e:
        print("Error uploading file: " + str(e))

我尝试使用 FileZilla 上传图片,它成功了。 请帮我解决这个错误。

错误源自:

ftp_connection.storbinary('STOR ' + upload_file_path, upload_file1)

【问题讨论】:

  • 谢谢。添加命令后,我的代码有效:ftp.af = socket.AF_INET6
  • 嗯,这使您的 Python 代码通过使用 EPSV 而不是 PASV 来解决 FTP 服务器配置错误的问题。它没有解决根本原因 - 你的服务器仍然坏了!

标签: python ubuntu ftp ftplib vsftpd


【解决方案1】:

您的 FTP 服务器配置错误。 pasv_address 指令必须设置为您的 FTP 服务器的地址。 0.0.0.0 肯定是无效的。

pasv_address=0.0.0.0

虽然 FileZilla 可以启发式地解决这个问题,但许多其他 FTP 客户端和库将(理所当然地)失败。我相信你会在 FileZilla 日志文件中找到这个:

命令:PASV
响应:227 进入被动模式 (0,0,0,0,X,Y)。
状态:服务器发送了带有不可路由地址的被动回复。改为使用服务器地址。


但请注意,如果服务器具有 IPv6 地址,则 vsftpd 存在错误。所以你也可以看看这个:
vsftpd returns 0,0,0,0 in response to PASV

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2020-12-25
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    相关资源
    最近更新 更多