ASP.NET MVC如何从FTP流式下载文件并直接返回FileResult避免全量加载
解决方案
你可以直接使用ASP.NET MVC内置的File方法返回FTP响应流,框架原生支持流式传输逻辑,不需要将文件全量加载到服务器内存,就能实现FTP下载和向用户传输同步进行。
补全后的完整代码
public FileResult getBigFileFromFTP() { FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp-location.com/test/bigfile.zip"); request.Method = WebRequestMethods.Ftp.DownloadFile; request.Credentials = new NetworkCredential("ftpuser", "ftppwd"); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); // 补全代码开始 // 声明文件对应的MIME类型,此处为zip文件的类型,其他文件类型按需修改 const string contentType = "application/zip"; // 客户端下载时展示的默认文件名 const string downloadFileName = "bigfile.zip"; // 直接返回流,MVC会在传输完成后自动释放相关资源 return File(responseStream, contentType, downloadFileName); }
注意事项
- 默认
File方法已经做了流的分段读取传输优化,不会占用和文件大小对等的服务器内存,完全满足大文件下载需求 - 请根据你实际下载的文件类型调整
contentType参数:通用二进制文件可以填application/octet-stream,PDF文件填application/pdf,以此类推 - 如果你使用的是.NET Core/.NET 5+环境,官方已不推荐使用
FtpWebRequest,可以替换为第三方FTP库实现相同逻辑,返回流的方式保持一致
内容的提问来源于stack exchange,提问作者treep
相关产品推荐
相关产品推荐

