繁体   English   中英

将通过 HTTP 上传到 ASP.NET 的文件进一步上传到 C# 和 SSH.NET 中的 SFTP 服务器

[英]Upload file uploaded via HTTP to ASP.NET further to SFTP server in C# and SSH.NET

我正在使用 SFTP 和 C# 通过 Renci SSH.NET 库设置文件传输。 我被困在这个问题上。

每当我在 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");
}

我希望输出文件上传到服务器,但实际输出是上传到服务器的文件与我尝试上传的文件同名,但大小为 0kb,也就是空的。

您当前的问题在这里得到解答:
使用 SSH.NET 从 ByteArray/MemoryStream 上传 - 创建的文件大小为 0KB


尽管您不需要中间的MemoryStream (而且它的效率很低)。

使用IFormFile.OpenReadStream

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM