Загрузите файл, загруженный через HTTP, в ASP.NET, далее на SFTP-сервер в C # и SSH.NET - PullRequest
1 голос
/ 17 апреля 2019

Я настраиваю передачу файлов через библиотеку Renci SSH.NET, используя SFTP и C #. И я застрял в этой проблеме.

Всякий раз, когда я загружаю файл в моей программе ASP .NET Core, он отправляет файл, но отправляет его как пустой файл с тем же именем.

public async Task<IActionResult> UploadFiles(List<IFormFile> files)
{
    string host = "----";
    string username = "----";
    string password = "----";
    string Name = "";
    var Stream = new MemoryStream();
    List<MemoryStream> stream = new List<MemoryStream>();
    var connectionInfo = new Renci.SshNet.ConnectionInfo(host, username, new PasswordAuthenticationMethod(username, password));
    var sftp = new SftpClient(connectionInfo);
    sftp.Connect();
    sftp.ChangeDirectory("DIRECTORY");

    try
    {
        //Read the FileName and convert it to Byte array.
        foreach (var formFile in files)
        {
            var memoryStream = new MemoryStream();
            await formFile.CopyToAsync(memoryStream);
            Name = formFile.FileName;
            using (var uplfileStream = memoryStream)
            {
                sftp.UploadFile(uplfileStream, Name, null);
            }
        }
    }

    catch (WebException ex)
    {
        throw new Exception((ex.Response as FtpWebResponse).StatusDescription);
    }
    sftp.Disconnect();
    return View("Inbox");
}

Я ожидаю вывод, когда файл загружается на сервер, но фактический вывод - это файл, загружаемый на сервер с тем же именем, что и файл, который я пытался загрузить, но его размер равен 0 КБ, то есть он пуст.

1 Ответ

1 голос
/ 17 апреля 2019

Ваша непосредственная проблема решена здесь:
Загрузка из ByteArray / MemoryStream с использованием SSH.NET - файл создается с размером 0 КБ


Хотя вам и не нужно промежуточное звено MemoryStream (и оно все равно неэффективно).

Использование IFormFile.OpenReadStream:

using (var uplfileStream = formFile.OpenReadStream())
{
    sftp.UploadFile(uplfileStream, Name);
}
...