【问题标题】:python ftp method - error 553 Could not create filepython ftp 方法 - 错误 553 无法创建文件
【发布时间】:2016-02-09 14:33:21
【问题描述】:

我正在使用以下def上传文件,过程是检查目录是否存在,如果不存在则应该创建它然后上传文件,

我不断收到错误消息,同时如果我与同一个用户连接并通过密码到 ftp 我可以创建目录,我正在使用 vsftp 作为服务器

    def uploadFTP(filepath, filename_new, env):

    global config

    ftpsrv = config[env]["ftpsrv"]
    ftpusr = config[env]["ftpuser"]
    ftppwd = config[env]["ftppass"]

    filename = os.path.basename(filename_new)
    today = datetime.datetime.now()
    today_path = today.strftime("%Y/%m/%d")
    filename=os.path.join(today_path, filename)
    if not os.path.exists(os.path.join(os.path.dirname(filepath), today_path)):
                os.makedirs(os.path.join(os.path.dirname(filepath), today_path))
    try:
        ftp = ftplib.FTP(ftpsrv)
        ftp.login(ftpusr, ftppwd)
    except:
    logger.error("Ftp connection error has occurred")
        raise
    else:
        f = open(filepath, "r")
        cmd = "STOR %s" %(filename)
        out = ftp.storbinary(cmd, f)
        f.close()
        ftp.quit()
        return out

错误如下:

 File "/usr/lib64/python2.6/ftplib.py", line 218, in getresp
    raise error_perm, resp
error_perm: 553 Could not create file.

这里有什么建议吗?

更新:

修改函数如下

def uploadFTP(filepath, filename_new, env):

    global config

    ftpsrv = config[env]["ftpsrv"]
    ftpusr = config[env]["ftpuser"]
    ftppwd = config[env]["ftppass"]

    filename = os.path.basename(filename_new)
    today = datetime.datetime.now()
    today_path = today.strftime("%Y/%m/%d")
    filename=os.path.join(today_path, filename)
    if not os.path.exists(os.path.join(os.path.dirname(filepath), today_path)):
                os.makedirs(os.path.join(os.path.dirname(filepath), today_path))
    try:
        ftp = ftplib.FTP(ftpsrv)
        ftp.login(ftpusr, ftppwd)
    except:
        logger.error("Ftp connection error has occurred")
        raise
    else:
        f = open(filepath, "r")
        ftp.mkd(today_path)
        cmd = "STOR %s" %(filename)
        out = ftp.storbinary(cmd, f)
        f.close()
        ftp.quit()
        return out

我得到了

   ftp.mkd(today_path)
  File "/usr/lib64/python2.6/ftplib.py", line 556, in mkd
    resp = self.sendcmd('MKD ' + dirname)
  File "/usr/lib64/python2.6/ftplib.py", line 243, in sendcmd
    return self.getresp()
  File "/usr/lib64/python2.6/ftplib.py", line 218, in getresp
    raise error_perm, resp
error_perm: 550 Create directory operation failed

注意:ftp 文件夹的权限是 777 并且所有者具有完全读写权限,如果我通过 ftp 连接我可以创建文件夹但通过此功能我不能

请指教

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您正在将句柄传递给文件夹:

    f = open(filepath, "r")
    

    而不是文件句柄:

    f = open(filepath + filename_new, "r")
    

    更新:

    您的变量today_path 有正斜杠,这表明您要创建子文件夹。您不能直接使用ftp.mkd 执行此操作,但是,您可以使用来自lecntsolution

    cdTree(today_path)

    lecnt使用这个方法:

    def cdTree(currentDir):
        if currentDir != "":
            try:
                ftp.cwd(currentDir)
            except IOError:
                cdTree("/".join(currentDir.split("/")[:-1]))
                ftp.mkd(currentDir)
                ftp.cwd(currentDir)
    

    【讨论】:

    • 它的返回错误 IOError: [Errno 2] No such file or directory: ,它应该在远程位置创建文件夹然后将文件放在那里..它没有这样做
    • 目录不存在需要先调用ftp.mkd(filepath)
    • 您的today_path 包含正斜杠,您要创建子文件夹吗?
    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2011-07-13
    • 2017-04-27
    • 2021-09-13
    相关资源
    最近更新 更多