3

大きなファイル (50Mb 以上) を Web サーバーにアップロードしようとしていますが、ストリームを閉じようとするとアプリがハングします。アップロードされたファイルが 50Mb より大きい場合、.Close() によってハングしますが、エラー メッセージはまったく表示されませんが、50Mb 未満のファイルは成功します。

私のアプリをぶら下げている fstream.Close() を回避するために何を提案しますか?

Dim target As New Uri(uploadedFilePath)
Dim fRequest As System.Net.FtpWebRequest = System.Net.WebRequest.Create(target)
fRequest.Credentials = New System.Net.NetworkCredential(usr, pswd)
fRequest.KeepAlive = False
fRequest.Proxy = Nothing
fRequest.UsePassive = True
fRequest.UseBinary = True
fRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
fRequest.Timeout = 180000

Dim count As Integer = 0
Dim readBytes As Integer = 0
Const bufferLength As Integer = 8192
Dim buffer As Byte() = New Byte(bufferLength - 1) {}
Dim fs As FileStream = File.OpenRead(localFileName)
Dim fStream As Stream = fRequest.GetRequestStream
Console.WriteLine("Writing bytes to the stream. {0}", String.Format("{0:HH:mm}", Now))
Do
    readBytes = fs.Read(buffer, 0, bufferLength)
    fStream.Write(buffer, 0, readBytes)
    count += readBytes
Loop While readBytes <> 0
Console.WriteLine("Writing {0} bytes to the stream. {1}", count, String.Format("{0:HH:mm}", Now))
fStream.Close()
Console.WriteLine("fstream Closed {0}", String.Format("{0:HH:mm}", Now))

出力は次のようになります。

Writing bytes to the stream. 13:08

Writing 51391500 bytes to the stream. 13:18

最後の Console.Writeline は決して出力されないことに注意してください。

PS Visual Studio 2010 および .Net Framework 4.0 を使用

4

3 に答える 3

1

入力ファイルストリーム (fs) を閉じていないことに気付きました。ファイルを FTP で転送し、それを「成功した」フォルダーに移動するプロセスがあります。fs がクローズされていないため、移動しようとすると「別のプロセスで使用されているファイル」と表示されました。トライキャッチでキャッチしました。あなたは50MBのファイルが成功すると言っているので、それがそれであるかどうかはわかりませんが、それは考えです.

を入れて、fs.close()それでエラーが解決するかどうかを確認します。189MB のファイルを移動しましたが、使用していた接続では時間がかかりました... しかし、移動までは問題なく動作しているように見えました。

于 2013-03-01T22:40:34.990 に答える
0

では、ファイル自体は FTP に到着しましたか? その場合、回避策は、この時点でプロセスをカットしてそのままにしておくことです。

設定をいじってみましたか?

于 2011-08-30T06:20:24.907 に答える
0

タイムアウトを増やすだけでよいと思います。

返されるエラーをトラップするためにループの外に置くと、Try-Catch次のようなエラーが見つかる場合があります。

基になる接続が閉じられました

それが役立つことを願っています!

于 2012-04-10T16:32:01.130 に答える