Копирование файлов с FTP в хранилище больших двоичных объектов Azure

#azure #ftp #azure-web-app-service #blob

#azure #ftp #azure-web-app-service #большой двоичный объект

Вопрос:

Я создал свой FTP (ftp://xyz.in ) с идентификатором пользователя и учетными данными. Я создал asp.net основное приложение API, которое будет копировать файлы с FTP в хранилище больших двоичных объектов Azure. У меня есть решение API, размещенное в C://Test2/Test2 папка. Теперь ниже приведен мой код :

         FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp:/xyz.in");
        request.Method = WebRequestMethods.Ftp.UploadFile;

        // This example assumes the FTP site uses anonymous logon.
        request.Credentials = new NetworkCredential("pqr@efg.com", "lmn");

        // Copy the contents of the file to the request stream.
        byte[] fileContents;
        // Getting error in below line.
        using (StreamReader sourceStream = new StreamReader("ftp://xyz.in/abc.txt")) 

        {
                fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
        }

        request.ContentLength = fileContents.Length;

        using (Stream requestStream = request.GetRequestStream())
        {
            requestStream.Write(fileContents, 0, fileContents.Length);
        }

        using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
        {
            Console.WriteLine($"Upload File Complete, status {response.StatusDescription}");
        }
 

Но в режиме
реального времени с использованием (StreamReader sourceStream = new StreamReader(«ftp://xyz.in/abc.txt «))
Я получаю сообщение об ошибке: System.IO.IOException: ‘Неверен синтаксис имени файла, имени каталога или метки тома: ‘C:Test2Test2ftp:xyz.inabc.txt »

Я не в состоянии понять, откуда это происходит ‘C:Test2Test2 ‘строка будет добавлена к моему FTP. Test2 — это папка, в которой находится мое приложение .Net Core.

Ответ №1:

StreamReader() не принимает URL / URI, он принимает путь к файлу в вашей локальной системе: (прочитайте документ): https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader.-ctor?view=net-5.0

StreamReader преобразует строку, которую вы указали в качестве имени файла («ftp://xyz.in/abc.txt «), и он ищет его в текущей запущенной папке «.C:Test2Test2 «. Если ваша строка была «abc.txt «, он будет искать файл под названием «abc.txt » в текущей папке, например C:Test2Test2abc.txt .

Вы хотите получить файл с помощью WebClient или чего-то подобного:

 WebClient request = new WebClient();
string url = "ftp://xyz.in/abc.txt";
request.Credentials = new NetworkCredential("username", "password");

try
{
  byte[] fileContents = request.DownloadData(url);

  // Do Something...
} 
 

Комментарии:

1. Спасибо, @Liam Fleming, наконец-то это сработало для меня. Большое спасибо.