«553 Не удается открыть этот файл: нет такого файла или каталога» при загрузке файла с помощью Python ftplib

avatar
newbPyth
13 августа 2021 в 12:30
376
1
1

Получен этот код загрузки FTP. В этом примере есть правильные данные, поэтому вы можете попробовать его. Путь правильный, так как я получил его из поля выбора (filename = askopenfilename()) Я получаю:

ftplib.error_perm: 553 Невозможно открыть этот файл: Нет такого файла или каталога

Здесь я получаю сообщение об ошибке:

cmd 'STOR /Users/rs/Desktop/DESKTOP/fields.png'
put 'STOR /Users/DESKTOP/rs/rs.png г\п'

import ftplib
from tkinter import Tk
from tkinter.filedialog import askopenfilename
import urllib


Tk().withdraw()
filename = askopenfilename()
print(filename)

from ftplib import FTP
import os
import fileinput

ftp = FTP()
ftp.set_debuglevel(2)
ftp.connect('ftpupload.net', 21)
ftp.login('ezyro_28887012', 'ricardo123456')
ftp.encoding = "utf-8"


print("List Dir: ",ftp.dir())

print("filename: ",filename)
with open(filename, "rb") as file:
    ftp.storbinary(f"STOR {filename}", file)

# Get list of files
print("NEW DIR AFTER UPLOAD: ",ftp.dir())

# Close the Connection
ftp.quit()

Кто-нибудь может помочь?

/usr/local/bin/python3.9 /Users/rs/PycharmProjects/OCPP/ftpconf.py
/Users/rs/Desktop/DESKTOP/issue fields.png
*get* '220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\n'
*get* '220-You are user number 292 of 6900 allowed.\n'
*get* '220-Local time is now 08:51. Server port: 21.\n'
*get* '220-This is a private system - No anonymous login\n'
*get* '220 You will be disconnected after 60 seconds of inactivity.\n'
*resp* '220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\n220-You are user number 292 of 6900 allowed.\n220-Local time is now 08:51. Server port: 21.\n220-This is a private system - No anonymous login\n220 You will be disconnected after 60 seconds of inactivity.'
*cmd* 'USER ezyro_28887012'
*put* 'USER ezyro_28887012\r\n'
*get* '331 User ezyro_28887012 OK. Password required\n'
*resp* '331 User ezyro_28887012 OK. Password required'
*cmd* 'PASS *************'
*put* 'PASS *************\r\n'
*get* '230-Your bandwidth usage is restricted\n'
*get* '230 OK. Current restricted directory is /\n'
*resp* '230-Your bandwidth usage is restricted\n230 OK. Current restricted directory is /'
*cmd* 'TYPE A'
*put* 'TYPE A\r\n'
*get* '200 TYPE is now ASCII\n'
*resp* '200 TYPE is now ASCII'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (185,27,134,11,171,227)\n'
*resp* '227 Entering Passive Mode (185,27,134,11,171,227)'
*cmd* 'LIST htdocs'
*put* 'LIST htdocs\r\n'
*get* '150 Accepted data connection\n'
*resp* '150 Accepted data connection'
drwxr-xr-x    2 28887012   28887012          108 Aug 13 08:47 .
drwxr-xr-x    3 0          0                 106 Jun 15 05:39 ..
-rw-r--r--    1 28887012   28887012        49619 Jul 27 10:32 210727_logs_16040279_10566_3.4.2.zip
-rw-r--r--    1 28887012   28887012      8695466 Jul 27 06:17 ECP_ISO_3.4.2.7z
-rw-r--r--    1 28887012   28887012          229 Jun 30 07:46 index.html
*get* '226-Options: -a -l \n'
*get* '226 5 matches total\n'
*resp* '226-Options: -a -l \n226 5 matches total'
*cmd* 'TYPE A'
*put* 'TYPE A\r\n'
*get* '200 TYPE is now ASCII\n'
*resp* '200 TYPE is now ASCII'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (185,27,134,11,112,120)\n'
*resp* '227 Entering Passive Mode (185,27,134,11,112,120)'
*cmd* 'LIST'
*put* 'LIST\r\n'
*get* '150 Accepted data connection\n'
*resp* '150 Accepted data connection'
drwxr-xr-x    3 0          0                 106 Jun 15 05:39 .
drwxr-xr-x    3 0          0                 106 Jun 15 05:39 ..
-r--r--r--    1 0          0                  90 Jun 15 05:39 .htaccess
-rw-r--r--    1 0          2                   0 Jun 15 05:39 .override
-rw-r--r--    1 0          2                   0 Jun 15 05:39 DO NOT UPLOAD FILES HERE
drwxr-xr-x    2 28887012   28887012          108 Aug 13 08:47 htdocs
*get* '226-Options: -a -l \n'
*get* '226 6 matches total\n'
*resp* '226-Options: -a -l \n226 6 matches total'
List Dir:  None
--------> <_io.BufferedReader name='/Users/rs/Desktop/DESKTOP/issue fields.png'>
-aaaaaaaaaaaaa---> /Users/rs/Desktop/DESKTOP/issue fields.png
*cmd* 'TYPE I'
*put* 'TYPE I\r\n'
*get* '200 TYPE is now 8-bit binary\n'
*resp* '200 TYPE is now 8-bit binary'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (185,27,134,11,228,17)\n'
*resp* '227 Entering Passive Mode (185,27,134,11,228,17)'
*cmd* 'STOR /Users/rs/Desktop/DESKTOP/issue fields.png'
*put* 'STOR /Users/rs/Desktop/DESKTOP/issue fields.png\r\n'
Traceback (most recent call last):
  File "/Users/rs/PycharmProjects/OCPP/ftpconf.py", line 32, in <module>
    ftp.storbinary(f"STOR {filename}", file)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ftplib.py", line 498, in storbinary
    with self.transfercmd(cmd, rest) as conn:
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ftplib.py", line 393, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ftplib.py", line 359, in ntransfercmd
    resp = self.sendcmd(cmd)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ftplib.py", line 281, in sendcmd
    return self.getresp()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ftplib.py", line 254, in getresp
    raise error_perm(resp)
ftplib.error_perm: 553 Can't open that file: No such file or directory
*get* "553 Can't open that file: No such file or directory\n"
*resp* "553 Can't open that file: No such file or directory"

Process finished with exit code 1
Источник

Ответы (1)

avatar
Martin Prikryl
13 августа 2021 в 13:22
1

Вы пытаетесь сохранить файл на удаленном сервере, используя локальный путь. Обратите внимание, что вы используете один и тот же путь с local open и remote storbinary. Я совершенно уверен, что на вашем удаленном сервере другая структура каталогов.

Если вы хотите загрузить файл в домашний каталог FTP, используйте только имя файла:

ftp.storbinary("STOR " + os.path.basename(filename), file)

Если вы хотите загрузить в определенную папку, используйте реальный путь на вашем FTP-сервере, например:

ftp.storbinary("STOR htdocs/" + os.path.basename(filename), file)