首页 > 解决方案 > 将通过 HTTP 上传到 ASP.NET 的文件上传到 C# 中的 FTP 服务器

问题描述

上传表格:

<form asp-action="Upload" asp-controller="Uploads" enctype="multipart/form-data">
<input type="file" name="file" maxlength="64" />
<button type="submit">Upload</button>

控制器/文件上传:

public void Upload(IFormFile file){
    using (WebClient client = new WebClient())
    {
        client.Credentials = new NetworkCredential("xxxx", "xxxx");
        client.UploadFile("ftp://xxxx.xxxx.net.uk/web/wwwroot/images/", "STOR", file.FileName);
    }
}

问题:

收到错误“找不到文件 xxxx”。我知道问题是它试图"C:\path-to-vs-files\examplePhoto.jpg"在 FTP 服务器上找到文件,这显然不存在。我一直在这里查看许多问题/答案,我认为我需要某种FileStream读/写代码。但我目前还没有完全理解这个过程。

标签: c#asp.net.netftpwebrequest

解决方案


使用IFormFile.CopyToIFormFile.OpenReadStream访问上传文件的内容。

虽然WebClient不能使用Streaminterface。所以你最好使用FtpWebRequest

public void Upload(IFormFile file)
{
    FtpWebRequest request =
        (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
    request.Credentials = new NetworkCredential("username", "password");
    request.Method = WebRequestMethods.Ftp.UploadFile;  

    using (Stream ftpStream = request.GetRequestStream())
    {
        file.CopyTo(ftpStream);
    }
}

推荐阅读