将文件直接上传到不属于部署的 Azure 应用服务

时间:2021-06-04 20:56:53

标签: azure-devops azure-web-app-service

我遇到了一种情况,我们重写了一个网站并将其部署到 Azure AppService,并且一切正常。我正在使用 Azure CDN 获取从站点链接中提取的相关参考 pdf 文件,一切都很好。

我遇到的问题是 pfd 文件的创建者硬编码链接到 pdf 文件中的其他文档。这些链接指向本地站点文件夹,例如,文档中将有一个链接指向此端点上的另一个文档 https://mysite/download/filename.pdf。

我需要做的是在 Azure AppService 上创建这些文件的副本,直到可以重写这些文件,以便可以继续访问它们,就像它们位于旧服务器的原始本地站点文件夹中一样。

我希望我不必将这些作为部署的一部分,因为它的文件超过 300mbs。我知道有一种 FTP 方法,但它不会在站点根目录上创建任何新文件夹或文件。我已经尝试过使用 filezilla。我还通过浏览器使用了 Powershell,这允许我创建文件夹和文件上传,但无法通过预期的主机名/下载/文件名访问它们。当我导航到所有 dll 都使用 PowerShell 的地方时,不允许我在那里创建一个文件夹,我认为这是真正的站点根目录。有没有人知道我缺少什么?

更新: 我忘了提到我们正在通过 Azure DevOps 使用 CI/CD 进行部署。

1 个答案:

答案 0 :(得分:0)

<块引用>

将文件直接上传到不属于部署的 Azure 应用服务

您可以尝试在发布管道中使用带有 azure powershell 任务的 Kudu api 并运行 kudu api:

$WebApp = Get-AzWebApp -Name '<appname>' -ResourceGroupName '<resourcegroupname>'
[xml]$publishingProfile = Get-AzWebAppPublishingProfile -WebApp $WebApp
# Create Base64 authorization header
$username = $publishingProfile.publishData.publishProfile[0].userName
$password = $publishingProfile.publishData.publishProfile[0].userPWD
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

$bodyToPOST = @{  
command = "md components"
                 dir = "D:\home\site"  
}  
# Splat all parameters together in $param  
$param = @{  
            # command REST API url  
            Uri = "https://<appname>.scm.azurewebsites.net/api/command"  
            Headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}  
            UserAgent = "powershell/1.0"  
            Method = "POST"  
            Body = (ConvertTo-Json $bodyToPOST)  
            ContentType = "application/json"  
}  
# Invoke REST call  
Invoke-RestMethod @param 

然后使用 kudu api 部署您的应用:

$param = @{  
            # zipdeploy api url  
            Uri = "https://<appname>.scm.azurewebsites.net/api/zip/site/components"  
            Headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}  
            UserAgent = "powershell/1.0"  
            Method = "PUT"  
            # Deployment Artifact Path  
            InFile = "$(System.DefaultWorkingDirectory)\<artifacts_alias>\drop\<artifacts_name>.zip"  
            ContentType = "multipart/form-data"  
}  
# Invoke REST call  
Invoke-RestMethod @param

您可以查看文档 Deploy To Azure (Platform As A Service) Websites Using Kudu REST APIs 以了解更多详细信息。

FTP没有在站点根目录下新建文件夹或文件的原因应该是上传的文件任务要上传到的为root用户所有,默认只能由root写入。如果其他用户需要上传文件,权限限制,无法操作。