如何通过代码将本地Zip文件FTP上传至Azure App Service
上传Zip文件到Azure App Service FTP服务器的代码实现
你已经通过Azure Resource Manager获取了FTP凭据,接下来可以通过以下两种代码方式完成本地Zip文件的上传:
前提准备
先将获取到的ScmUri转换为可用的FTP地址:
- 把
https://前缀替换为ftp:// - 目标上传路径通常为
/site/wwwroot/[你的Zip文件名],这个目录是Azure App Service的网站根目录
方式1:使用.NET原生FtpWebRequest(无需第三方依赖)
直接利用.NET内置类实现,无需额外安装包:
using System; using System.IO; using System.Net; using System.Threading.Tasks; public async Task UploadZipToFtp(string ftpUsername, string ftpPassword, string ftpEndpoint, string localZipPath) { // 构造完整的FTP上传Uri var baseFtpUri = new Uri(ftpEndpoint.Replace("https://", "ftp://")); var zipFileName = Path.GetFileName(localZipPath); var ftpUploadUri = new Uri(baseFtpUri, $"/site/wwwroot/{zipFileName}"); // 初始化FTP请求 var request = (FtpWebRequest)WebRequest.Create(ftpUploadUri); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential(ftpUsername, ftpPassword); // Azure FTP强制要求FTPS,必须启用SSL request.EnableSsl = true; request.UsePassive = true; // 读取本地文件并上传 using (var fileStream = new FileStream(localZipPath, FileMode.Open, FileAccess.Read)) using (var requestStream = await request.GetRequestStreamAsync()) { await fileStream.CopyToAsync(requestStream); } // 验证上传结果 using (var response = (FtpWebResponse)await request.GetResponseAsync()) { Console.WriteLine($"上传完成,服务器响应: {response.StatusDescription}"); } }
方式2:使用FluentFTP库(简洁易用)
FluentFTP是一个封装完善的FTP客户端库,代码更简洁易维护,需要先安装NuGet包:
Install-Package FluentFTP
实现代码:
using FluentFTP; using System.IO; using System.Threading.Tasks; public async Task UploadZipWithFluentFtp(string ftpUsername, string ftpPassword, string ftpEndpoint, string localZipPath) { // 提取FTP主机地址(去掉https://前缀) var ftpHost = ftpEndpoint.Replace("https://", ""); var zipFileName = Path.GetFileName(localZipPath); var remoteUploadPath = $"/site/wwwroot/{zipFileName}"; // 初始化FTPS客户端(Azure使用FTPS协议) using (var client = new FtpClient(ftpHost, ftpUsername, ftpPassword)) { client.EnableSsl = true; client.Port = 443; // SCM FTP服务使用443端口,普通FTP用21 // 连接服务器 await client.ConnectAsync(); // 上传文件(如果远程已存在则覆盖) await client.UploadFileAsync(localZipPath, remoteUploadPath, FtpRemoteExists.Overwrite); // 断开连接 await client.DisconnectAsync(); } }
关键注意事项
- FTPS强制要求:Azure App Service的FTP服务默认只允许FTPS连接,必须启用
EnableSsl,否则会连接失败。 - 用户名格式:获取到的
PublishingUserName通常为{应用名称}\{用户名}格式,直接使用即可,无需修改。 - 自动解压说明:通过FTP上传的Zip文件不会自动解压,如果需要自动部署,可后续调用Kudu的解压API,或直接使用Azure的Zip部署功能(而非FTP)。
内容的提问来源于stack exchange,提问作者Adnan Hodzic
相关产品推荐
相关产品推荐

