每上两次或三次成功上传后,Ftp上传失败

时间:2012-01-13 01:08:45

标签: powershell ftp

上传时收到以下错误消息。 Powershell使用7za.exe创建一个zip文件,并调用我的FTP函数来上传文件。可能导致什么问题? Windows ftp.exe客户端会更稳定吗?

  

使用“0”参数调用“GetRequestStream”的异常:“远程   服务器返回错误:(550)文件不可用(例如,文件不可用)   发现,没有访问权限。“

更新
似乎相同的文件总是在循环中失败。但是,如果我只是运行ftpFile file_name_with_full_path就可以了。 (file_name_with_full_path从循环脚本的输出中复制。

更新2:
我尝试使用webclient ($webclient.UploadFile($uri, $File))来ftp文件。同样的错误。

更新3:
找到了这个Question。可能需要添加$ftp.KeepAlive = false。为什么呢?

function ftpFile
{
    Param (
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        [ValidateScript({Test-Path $_})]
        [String] 
        $filePath
        ,
        [Parameter(Mandatory=$false)]
        [String]
        $ftpUrl = "ftp://10.0.1.1/Data/"
        ,
        [Parameter(Mandatory=$false)]
        [String]
        $Login = "username"
        ,    
        [Parameter(Mandatory=$false)]
        [String]
        $password = "password"
    )
    Process {
        try {
            $ftp = [System.Net.FtpWebRequest]::Create("$ftpUrl/$(Split-Path $filePath -Leaf)")
            $ftp = [System.Net.FtpWebRequest]$ftp
            $ftp.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
            $ftp.Credentials = new-object System.Net.NetworkCredential("$Login","$password")
            $ftp.UseBinary = $true
            $ftp.UsePassive = $true

            # read in the file to upload as a byte array
            $content = gc -en byte $filePath
            $ftp.ContentLength = $content.Length

            # get the request stream, and write the bytes into it
            $rs = $ftp.GetRequestStream()
            $rs.Write($content, 0, $content.Length)
            $rs.Close()
            $rs.Dispose()

            echo "ftpFile: $filePath size: $($content.Length)"
        }
        catch {
            throw "FTP: $_"
        }
    }
}

2 个答案:

答案 0 :(得分:0)

FTP错误550是拒绝访问,并且往往是用户名/密码冲突。

如果您正在使用循环并在每次调用此函数时传递相同的用户名和密码 和 它正在研究循环的一些迭代而不是其他循环 然后 你需要检查服务器上的ftp auth / error日志,以便掌握你被拒绝的原因。

正如@AndyArismendi所问,它是否总是在同一个文件中失败?如果没有更完整的代码和对您的使用的理解,很难将其锁定为一个简单的解决方案。

答案 1 :(得分:0)

发现此问题。需要添加$ftp.KeepAlive = false