Загрузить файл на FTP-сервер без разрешения на чтение
Я хочу загрузить и сохранить некоторые из моих резервных копий на другой сервер через учетную запись FTP. Эта учетная запись имеет только права на чтение (без прав на запись), чтобы злоумышленники не могли удалять мои резервные копии.
Итак, я начал кодировать решение с полными разрешениями (он же read + write). Вот как выглядит мой код: (этот код в настоящее время работает)
string file = @"C:\1.html";
FtpWebRequest ftpClient = (FtpWebRequest)FtpWebRequest.Create(new Uri(ConfigurationManager.AppSettings["FTPUrl"]) + @"/" + Path.GetFileNameWithoutExtension(file));
ftpClient.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["FtpUserName"], ConfigurationManager.AppSettings["FtpPassword"]);
ftpClient.Method = WebRequestMethods.Ftp.UploadFile;
ftpClient.UseBinary = true;
ftpClient.KeepAlive = true;
FileInfo fi = new FileInfo(file);
ftpClient.ContentLength = fi.Length;
byte[] buffer = new byte[4097];
int bytes = 0;
int total_bytes = (int)fi.Length;
System.IO.FileStream fs = fi.OpenRead();
System.IO.Stream rs = ftpClient.GetRequestStream();
while (total_bytes > 0)
{
bytes = fs.Read(buffer, 0, buffer.Length);
rs.Write(buffer, 0, bytes);
total_bytes = total_bytes - bytes;
}
fs.Close();
rs.Close();
Но когда я удаляю права на чтение, он больше не работает. Проблемная строка кода:
System.IO.Stream rs = ftpClient.GetRequestStream();
И ошибка:
Произошло необработанное исключение типа "System.Net.WebException" в System.dll
Дополнительная информация: Удаленный сервер возвратил ошибку: (550) Файл недоступен (например, файл не найден, нет доступа).
Теоретически, кажется нормальным загружать файл без прав чтения (также работает с FileZilla). Практически, это не работает для меня. Может кто-нибудь дать мне решение по этому делу?