You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码将本地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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:26:16