当前位置: 首页 > 知识库问答 >
问题:

使用FTP将文件发布到Azure Web App时出错

谭宜
2023-03-14

我遵循MSDN指南发布/上传ASP。Net Web应用程序文件到Azure Web App(资源管理器)。但每当子文件夹启动时,获取上载文件时出错。根文件夹运行正常。

上传到ftp://XXXXXX.ftp.azurewebsites.windows.net/site/wwwroot/bin/Antlr3.Runtime.dll来自C:\Users\SampleWebApp\bin\Antlr3。运行时。动态链接库

异常调用"UploadFile"与"2"参数(s):

远程服务器返回错误:(550)文件不可用(例如,找不到文件,无法访问)

Param(
[string] [Parameter(Mandatory=$true)] $AppDirectory, 
[string] [Parameter(Mandatory=$true)] $WebAppName, 
[string] [Parameter(Mandatory=$true)] $ResourceGroupName 
)

$xml = [Xml](Get-AzureRmWebAppPublishingProfile -Name $webappname `
-ResourceGroupName $ResourceGroupName `
-OutputFile null)
$username = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@userName").value
$password = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@userPWD").value
$url = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@publishUrl").value

Set-Location $appdirectory
$webclient = New-Object -TypeName System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($username,$password)
$files = Get-ChildItem -Path $appdirectory -Recurse | Where-Object{!($_.PSIsContainer)}

foreach ($file in $files)
{
if ($file.FullName)
$relativepath = (Resolve-Path -Path $file.FullName -Relative).Replace(".\", "").Replace('\', '/')
$uri = New-Object System.Uri("$url/$relativepath")
"Uploading to " + $uri.AbsoluteUri
"From " + $file.FullName
$webclient.UploadFile($uri, $file.FullName)
} 
$webclient.Dispose()

共有1个答案

杜起运
2023-03-14

由于问题只从第一次出现子目录(bin)文件开始,这可能是因为其他进程正在使用Antlr dll。能否关闭所有活动的调试会话并再次运行此脚本?还要确保在形成相对uri路径后没有任何空格

[UPDATE]无法创建子目录,因此从子目录上载文件时出现错误“未找到文件”。

在从子目录上传文件之前,在for循环中进行了一些更改,以便在ftp上创建子目录,并且工作正常。

$appdirectory="<Replace with your app directory>"
$webappname="mywebapp$(Get-Random)"
$location="West Europe"

# Create a resource group.
New-AzureRmResourceGroup -Name myResourceGroup -Location $location

# Create an App Service plan in `Free` tier.
New-AzureRmAppServicePlan -Name $webappname -Location $location `
-ResourceGroupName myResourceGroup -Tier Free

# Create a web app.
New-AzureRmWebApp -Name $webappname -Location $location -AppServicePlan $webappname `
-ResourceGroupName myResourceGroup

# Get publishing profile for the web app
$xml = (Get-AzureRmWebAppPublishingProfile -Name $webappname `
-ResourceGroupName myResourceGroup `
-OutputFile null)

# Not in Original Script
$xml = [xml]$xml

# Extract connection information from publishing profile
$username = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@userName").value
$password = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@userPWD").value
$url = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@publishUrl").value

# Upload files recursively 
Set-Location $appdirectory
$webclient = New-Object -TypeName System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($username,$password)
$files = Get-ChildItem -Path $appdirectory -Recurse #Removed IsContainer condition
foreach ($file in $files)
{
    $relativepath = (Resolve-Path -Path $file.FullName -Relative).Replace(".\", "").Replace('\', '/')  
    $uri = New-Object System.Uri("$url/$relativepath")

    if($file.PSIsContainer)
    {
        $uri.AbsolutePath + "is Directory"
        $ftprequest = [System.Net.FtpWebRequest]::Create($uri);
        $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::MakeDirectory
        $ftprequest.UseBinary = $true

        $ftprequest.Credentials = New-Object System.Net.NetworkCredential($username,$password)

        $response = $ftprequest.GetResponse();
        $response.StatusDescription
        continue
    }

    "Uploading to " + $uri.AbsoluteUri + " from "+ $file.FullName

    $webclient.UploadFile($uri, $file.FullName)
} 
$webclient.Dispose()

我也在博客上详细介绍了我是如何解决这个问题的。

 类似资料:
  • 问题内容: 我试图在此处修改@BalusC优秀教程,以发送gzip压缩文件。这是一个有效的java类: 您必须编辑和字段,并在URL中设置一个servlet-其方法是: 现在,当field设置为true时,FILENAME会被正确压缩并发送到服务器,但是当我尝试将其提取时,它已损坏(我在Windows上使用7z,它将打开gzip文件作为存档,但是当我尝试将文件提取到 内部时 , gzip归档文件说

  • 问题内容: 我试图在此处修改@BalusC优秀教程,以发送gzip压缩文件。这是一个有效的java类: 您必须编辑和字段,并在URL中设置一个servlet-其方法是: 现在,当field设置为true时,FILENAME会被正确压缩并发送到服务器,但是当我尝试将其提取时,它已损坏(我在Windows上使用7z,它将打开gzip文件作为存档,但是当我尝试将文件提取到 内部时 , gzip归档文件说

  • 我有一个应用程序,可以使用Facebook SDK将本机(MOV文件)视频发布到FacebookiOS。它一直运行正常,直到几周前才出现以下错误: 完整的错误字符串是: error Domain = com . Facebook . SDK Code = 5 "操作无法完成。(com.facebook.sdk错误5。)" UserInfo = 0x1ea 42880 { com . Faceboo

  • 我尝试使用C#将文件上传到FTP服务器。文件已上传,但字节为零。

  • 我是python新手,我编写了从url上传视频到vk的简单脚本,我用小文件测试了这个脚本,但对于内存不足的大文件,我读到使用“requests\u toolbelt”可以发布大文件,我如何将它添加到我的脚本中?

  • 我正在尝试在 Jenkins 中配置以下工作流模式: 构建战争文件 我似乎错过了一些东西。应用程序的组件(jar 文件等)似乎在目标版本/快照目录中很好地部署到 Artifactory 中。然而,最终的WAR神器似乎并没有存储在Artifactory中,尽管Jenkins清楚地指出该神器是成功构建的。 我使用的是标准目标:全新安装。我也尝试过(没有改变):全新安装重新打包 我安装了Jenkins的