2017-01-15 7 views
1

どのように私は、PowerShellを使用して、私のFTPサーバへの2ギガバイト以上のファイルをアップロードすることができ、私は以下の機能には、FTP経由2ギガバイト以上のファイルをアップロードすることはできません - PowerShellの

# Create FTP Rquest Object 

$FTPRequest = [System.Net.FtpWebRequest]::Create("$RemoteFile") 
    $FTPRequest = [System.Net.FtpWebRequest]$FTPRequest 
    $FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile 
    $FTPRequest.Credentials = new-object System.Net.NetworkCredential($Username, $Password) 
    $FTPRequest.UseBinary = $true 
    $FTPRequest.Timeout = -1 
    $FTPRequest.KeepAlive = $false 
    $FTPRequest.ReadWriteTimeout = -1 
    $FTPRequest.UsePassive = $true 

    # Read the File for Upload 

    $FileContent = [System.IO.File]::ReadAllBytes(“$LocalFile”) 
    $FTPRequest.ContentLength = $FileContent.Length 

# Get Stream Request by bytes 

try{ 
    $Run = $FTPRequest.GetRequestStream() 
    $Run.Write($FileContent, 0, $FileContent.Length) 

# Cleanup 

    $Run.Close() 
    $Run.Dispose()  
} catch [System.Exception]{ 
    'Upload failed.'  
} 

を使用しています私はこのエラーを取得していますアップロード中。

Exception calling "ReadAllBytes" with "1" argument(s): "The file is too long. 
    This operation is currently limited to supporting files less than 2 gigabytes 
    in size." 

    +  $FileContent = [System.IO.File]::ReadAllBytes(“$LocalFile”) 
    +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : IOException 

私は他の機能を使用しているが、それはチャンクに大きなファイルを分割する以外に、このためのソリューションがある50キロバイト/ sの 希望よりも高いつもりではなかったように結果がとても遅いアップロードの速度だった

+2

可能重複http://stackoverflow.com/質問/ 39345335/powershell-read-file-in-chunks) – sodawillow

+0

私はそれを今すぐチェックします.. – Vagho

+1

'$ FileStream = [System.IO.File] :: OpenRead(" $ LocalFil e "); $ FTPRequest.ContentLength = $ FileStream.Length; $ Run = $ FTPRequest.GetRequestStream(); $ FileStream.CopyTo($ Run); $ Run.Close(); $ FileStream.Close(); ' – PetSerAl

答えて

0

ありがとうPetSerAisodawillow

私は2つの解決策を見つけました。

による解決策1:によってsodawillow

$bufsize = 256mb 
    $requestStream = $FTPRequest.GetRequestStream() 
    $fileStream = [System.IO.File]::OpenRead($LocalFile) 
    $chunk = New-Object byte[] $bufSize 

    while ($bytesRead = $fileStream.Read($chunk, 0, $bufsize)){ 
     $requestStream.write($chunk, 0, $bytesRead) 
     $requestStream.Flush() 
    } 

    $FileStream.Close() 
    $requestStream.Close() 

解決策2:PetSerAi

$FileStream = [System.IO.File]::OpenRead("$LocalFile") 
    $FTPRequest.ContentLength = $FileStream.Length 
    $Run = $FTPRequest.GetRequestStream() 
    $FileStream.CopyTo($Run, 256mb) 
    $Run.Close() 
    $FileStream.Close() 
([PowerShellはチャンク内のファイルを読む]の
+2

'$ FileStream.CopyTo($ Run、256mb)'をストリームコピーするためのバッファサイズを増やすことができます。それは速くなるはずです。 – PetSerAl

+0

私はそれを試してみる:)感謝。 – Vagho

関連する問題