Загрузить файл с помощью Powershell, используя поток ответов - PullRequest
1 голос
/ 27 января 2012

У меня возникла проблема при попытке загрузить файл с powershell. Я пытаюсь создать файл .zip для целевой учетной записи на целевом сервере. На целевом сервере работает IIS FTP 7.5 и включена изоляция пользователя с диапазоном портов канала данных 5500-6500 (если это может иметь значение).

Вот мой код ниже - проблема в том, что я не могу вызвать метод для выражения с нулевым значением в запросе $responsestream. Пожалуйста, дайте мне знать, если я обманываю, просматривая всю сеть ... у меня было так много проблем с загрузкой файлов!

Также я хочу сказать, что я использовал скрипт загрузки, который я конвертирую в загрузку, так как у меня не было успеха со скриптами загрузки, которые я пробовал ранее.

$targetpath = "ftp://10.21.109.202/Recieve/account_apps.zip"
$sourceuri = "D:\AccountManager\Send\$RTMPHOST\account_apps.zip"
$username = "AccountManager"
$password = "test"

# Create a FTPWebRequest object to handle the connection to the ftp server
$ftprequest = [System.Net.FtpWebRequest]::create($sourceuri)

# set the request's network credentials for"

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

$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$ftprequest.UseBinary = $true
$ftprequest.KeepAlive = $false

# send the ftp request to the server
$ftpresponse = $ftprequest.GetResponse()

# get a download stream from the server response
$responsestream = $ftpresponse.GetRequestStream()

# create the target file on the local system and the download buffer
$targetfile = New-Object IO.FileStream ($targetpath,[IO.FileMode]::Create)
[byte[]]$readbuffer = New-Object byte[] 1024

# loop through the download stream and send the data to the target file
do{
    $readlength = $responsestream.Read($readbuffer,0,1024)
    $targetfile.Write($readbuffer,0,$readlength)
}
while ($readlength -ne 0)

$targetfile.close()

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Вот более простой подход к загрузке файла в URI с использованием класса WebClient :

$targetUri = "ftp://10.21.109.202/Recieve/account_apps.zip"
$sourcePath = "D:\AccountManager\Send\$RTMPHOST\account_apps.zip"
$client = New-Object System.Net.WebClient
$client.Credentials = New-Object System.Net.NetworkCredential($username,$password)

$client.UploadFile($targetUri, $sourcePath)
0 голосов
/ 20 мая 2012

Не используйте ответ для загрузки. Протокол FTP не использует поездки туда и обратно.

$stream = $ftprequest.GetRequestStream()

$stream.Write(...)

$stream.Close()

$ftpresponse= $ftprequest.GetResponse()
#... is success?
$ftpresponse.Close()

Ответ ПОСЛЕ запроса (со всеми байтами) будет успешным или неудачным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...