【问题标题】:Getting "Operation not permitted" or "Not a regular file" when uploading file with Python ftplib使用 Python ftplib 上传文件时出现“不允许操作”或“不是常规文件”
【发布时间】:2020-06-25 01:55:28
【问题描述】:

我想使用 Python 将文件上传到租用的 FTP 服务器 (coreserver)。代码是这样的

# -*- coding: utf-8 -*-
import ftplib

def ftp_upload(hostname, username, password, upload_src_path, upload_dst_path):
    ftp = ftplib.FTP(hostname)
    ftp.set_pasv("true")
    ftp.login(username, password)
    fp = open(upload_src_path, 'rb')
    ftp.storbinary(upload_dst_path ,fp)

    ftp.close()
    fp.close()

hostname = "example.com"
upload_src_path = "/content/drive/My Drive/DSC_0569.JPG"
upload_dst_path = "STOR /public_html/example.com/"
username = "example"
password = "example"

ftp_upload(hostname, username, password, upload_src_path, upload_dst_path)

但错误是这样发生的

error_perm: 550 /public_html/example.com/: Operation not permitted

我试过了

STOR /public_html/
STOR /public_html
STOR /public_html/example.com/
STOR /public_html/example.com
STOR /example.com/
STOR /example.com

但错误总是发生

error_perm: 550 /public_html/example.com/: Operation not permitted

error_perm: 550 /public_html/example.com/: Not a regular file

谁能帮我解决这个问题?

【问题讨论】:

    标签: python ftp ftplib


    【解决方案1】:

    FTP.storbinary 参数中的路径是目标文件的路径,而不仅仅是目标文件夹的路径。 ftplib 怎么知道你上传的文件名?

    应该是这样的:

    upload_dst_path = "STOR /public_html/xxxxxxx.com/DSC_0569.JPG"
    

    【讨论】:

    • 非常感谢 Martin 先生,我尝试了您的评论,现在错误是 error_perm: 550 /public_html/xxxxxxx.com/DSC_0569.JPG: Operation not allowed OMG...

    • 和日文Q和A站大佬推荐加一行我试过加

      ftp.prot_p() #切换到安全数据连接

      紧跟在
      ftp.login(username, password)

      之后错误信息变成了

      AttributeError: 'FTP'对象没有属性 'prot_p'

      但我是初学者,用谷歌搜索,但找不到解决这个问题的方法....

      你能告诉我我接近了吗?分辨率?
    • 您可以使用任何命令行/GUI FTP 客户端将该文件上传到该文件夹​​吗?
    • 感谢您的回复!是的,我通过 Filezilla FTP 客户端完成并成功nakanopropertymalaysia.com/DSC_0569.JPG 这是通过 Filezilla 成功上传的实际站点和实际照片
    • 请发布详细的 FileZilla 日志文件。
    【解决方案2】:

    原来 C# 不支持 CWD 命令

    FTPSClient client = new FTPSClient())
    {
    client.Connect(host,
    new NetworkCredential(username, password), 
    ESSLSupportMode.ClearText //For without SSL/TSL
    );
    client.SetCurrentDirectory("usbfolder");
    client.PutFile(filePath,fileName); // "C:/file.txt" and "file.txt", for example
    }
    

    我把它放在这里是希望没有其他人经历这种痛苦。

    【讨论】:

    • 问题既不是关于 C# 也不是关于 CWD。​​span>
    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多