Я пишу приложение Windows Forms на С#, которое позволяет пользователю подключаться к микроконтроллеру и загружать программные файлы через FTP.
Я могу успешно загружать программные файлы через Filezilla. Но когда я запускаю приведенный ниже код, я получаю сообщение об ошибке. Удаленный сервер вернул ошибку: (451) Локальная ошибка при обработке. в строке ftpstream.Close(); каждый раз, независимо от того, какой файл я пытаюсь загрузить, независимо от размера или типа файла, и новый файл действительно отображается в Filezilla на FiPy, но с размером 0 байт.
Я стер все программные файлы на микроконтроллере, поэтому я знаю, что проблема не в месте для хранения, и я не думаю, что это проблема с брандмауэром, поскольку я могу успешно загрузить через Filezilla.
Создаваемое WebException не показывает дополнительных сведений в InnerException, а StatusDescription возвращается в виде пустой строки.
Я разместил этот вопрос на форуме для конкретного микроконтроллера, который я использую, но не получил решения. Вот ссылка на этот пост, он включает журналы FTP и некоторые решения, которые были опробованы в комментариях: https://forum.pycom.io/topic/6937/fipy-ftp-upload-in-c-возвращает-451-локальная-ошибка-в-обработке
Я исчерпал все результаты Google.
Может кто-нибудь мне помочь?
Мой код:
var deviceFilepath = "ftp://192.168.4.1/flash/main.py";
var appFilepath = "rwis\\main.py";
string UserId = "micro";
string Password = "python";
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(deviceFilepath);
ftp.Credentials = new NetworkCredential(UserId, Password);
ftp.UsePassive = true;
ftp.Method = WebRequestMethods.Ftp.UploadFile;
var buffer = File.ReadAllBytes(appFilepath);
Stream ftpstream = ftp.GetRequestStream();
ftpstream.Write(buffer, 0, buffer.Length);
ftpstream.Close();
ИЗМЕНИТЬ:
Журнал FTP от Filezilla:
2021-04-09 09:36:52 3608 1 Status: Connecting to 192.168.4.1:21...
2021-04-09 09:36:52 3608 1 Status: Connection established, waiting for welcome message...
2021-04-09 09:36:52 3608 1 Response: 220 Micropython FTP Server
2021-04-09 09:36:52 3608 1 Status: Plain FTP is insecure. Please switch to FTP over TLS.
2021-04-09 09:36:52 3608 1 Command: USER micro
2021-04-09 09:36:52 3608 1 Response: 331
2021-04-09 09:36:52 3608 1 Command: PASS ******
2021-04-09 09:36:52 3608 1 Response: 230
2021-04-09 09:36:52 3608 1 Status: Server does not support non-ASCII characters.
2021-04-09 09:36:52 3608 1 Status: Logged in
2021-04-09 09:36:52 3608 1 Status: Retrieving directory listing...
2021-04-09 09:36:52 3608 1 Command: PWD
2021-04-09 09:36:52 3608 1 Response: 257 /
2021-04-09 09:36:52 3608 1 Status: Directory listing of "/" successful
2021-04-09 09:36:55 3608 1 Status: Retrieving directory listing of "/flash"...
2021-04-09 09:36:55 3608 1 Command: CWD /flash
2021-04-09 09:36:55 3608 1 Response: 250
2021-04-09 09:36:55 3608 1 Command: TYPE I
2021-04-09 09:36:55 3608 1 Response: 200
2021-04-09 09:36:55 3608 1 Command: PASV
2021-04-09 09:36:55 3608 1 Response: 227 (192,168,4,1,7,232)
2021-04-09 09:36:55 3608 1 Command: LIST
2021-04-09 09:36:55 3608 1 Response: 150
2021-04-09 09:36:56 3608 1 Response: 226
2021-04-09 09:36:56 3608 1 Status: Directory listing of "/flash" successful
2021-04-09 09:36:59 3608 1 Status: Starting upload of C:\Users\fcons_tzfi6gp\Documents\GitHub\production-assembly-app\bin\Debug\rwis\rwis_config.py
2021-04-09 09:36:59 3608 1 Command: TYPE A
2021-04-09 09:36:59 3608 1 Response: 200
2021-04-09 09:36:59 3608 1 Command: PASV
2021-04-09 09:36:59 3608 1 Response: 227 (192,168,4,1,7,232)
2021-04-09 09:36:59 3608 1 Command: STOR rwis_config.py
2021-04-09 09:36:59 3608 1 Response: 150
2021-04-09 09:36:59 3608 1 Response: 226
2021-04-09 09:36:59 3608 1 Status: File transfer successful, transferred 1,361 bytes in 1 second
Журнал FTP из моего кода:
System.Net Information: 0 : [15404] FtpWebRequest#47891719::.ctor(ftp://192.168.4.1/flash/rwis_config.py)
System.Net Information: 0 : [15404] FtpWebRequest#47891719::GetRequestStream(Method=STOR.)
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Created connection from 192.168.4.2:61116 to 192.168.4.1:21.
System.Net Information: 0 : [15404] Associating FtpWebRequest#47891719 with FtpControlStream#16454088
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Received response [220 Micropython FTP Server]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Sending command [USER micro]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Received response [331 ]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Sending command [PASS ********]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Received response [230 ]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Sending command [OPTS utf8 on]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Received response [502 ]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Sending command [PWD]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Received response [257 /]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Sending command [TYPE I]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Received response [200 ]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Sending command [PASV]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Received response [227 (192,168,4,1,7,232)]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Sending command [STOR flash/rwis_config.py]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Received response [150 ]
System.Net Information: 0 : [15404] FtpControlStream#16454088 - Received response [451 ]
FtpWebRequest
для новой разработки. Для получения дополнительной информации и альтернативFtpWebRequest
см.WebRequest
не должно быть используется на GitHub. - person   schedule 09.04.2021FtpWebRequest
, она все еще отлично работает. ИWebClient
используетFtpWebRequest
под капотом. Так что переход на него вряд ли поможет. + Покажите нам файл журнала из FileZilla и ваш код .NET. (оба работают на одном локальном компьютере) - person Martin Prikryl   schedule 09.04.2021STOR flash/rwis_config.py
, в то время как FileZilla обрабатываетCWD /flash
+STOR rwis_config.py
. Вы ничего не можете с этим поделать. + Действительно ли ваш FTP-сервер возвращает код без сообщения ([451 ]
)? Или ты редактировал лог? - person Martin Prikryl   schedule 09.04.2021UseBinary=false
. Как я пишу, вы не можете заставить .NET отправить командуCWD
. Возможно, вам придется попробовать другую клиентскую библиотеку FTP. Попробуйте FluentFTP. - person Martin Prikryl   schedule 10.04.2021