byte916
@byte916

Как залить файл по ftp если хост — линукс?

Сайт на Asp.Net Core 3.1, люди загружают на сайт файлы, эти файлы нужно сохранить на FTP.
Для загрузки используется FtpWebRequest, Stream создаётся таким образом:
public Stream GetUploadStream(string filePath)
        {
            var request = (FtpWebRequest)WebRequest.Create(_ftp.Server + filePath);
            request.Credentials = _credential;
            request.EnableSsl = true;
            request.UseBinary = true;
            request.Method = WebRequestMethods.Ftp.UploadFile;
            
            return request.GetRequestStream();
        }

Сама загрузка происходит таким образом
// file - IFormFile из multipart form
            var requestStream = ftp.GetUploadStream(filePath);
            await file.OpenReadStream().CopyToAsync(requestStream);
            requestStream.Close();


Этот код прекрасно работает под Windows (при запуске в студии через iis express), но не работает при запуске на Linux.
Ошибка при попытке загрузить файл на линуксе такая
Message = The remote server returned an error: (550) File unavailable (e.g., file not found, no access).

Если приводить Exception к WebException и смотреть ((FtpWebResponse) e.Response).StatusDescription, то ошибка такая
550 read tcp ip:port-\u003Eip:port: read: connection reset by peer\r\n

При этом создаётся файл нулевой длинны.
Конфиги, ftp сервер, логин и пароль - всё одинаковое.
Пробовал вместо потока отправлять массив байтов (точнее массив чаров из нескольких символов), и это успешно срабатывало. При этом преобразование входного файла в массив байт не помогает - ошибка та же.
В чём может быть проблема и как её решить?
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
@caballero
Программист
FTP вообще там ни при чем ему все равно

Обычно разница в том что на линухе имена файлов чуствительны к регистру
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы