DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ファイルアップロードについて

環境/言語:[VB.NET 2005]
分類:[.NET]

今VB.netでキャプチャしてからその画像ファイルをASP.netサーバに転送し、ファイルアップロードしよと思ってます。キャプチャは一定の時間間隔で自動でキャプチャでき、キャプチャしたファイルも指定した時間に毎回アップロードになるようにしたいです。
でも、キャプチャを取る時間が短いと転送中にエラガ生じます。
ファイルを一回転送し終わったら、何か転送をすぐ切断するメソッドとかありますでようか?120秒置きにキャプチャして転送すると問題はないけど、それより短いとだめです。どうすればいいでしょうか?教えてください。
http://www.atmarkit.co.jp/fdotnet/dotnettips/323uploadfile/uploadfile.html
このサイトを参考にしましたけど、
Dim posted As HttpPostedFile = Request.Files(0)
連続で、転送するときにもRequest.Files(0)で大丈夫ですか?

よろしくお願いいたします。
「書き込みのマナーについて」はお読みいただけていますか?「書き込みのマナーについて」にあるように、ご質問は具体的にお願いいたします。どのようにアップロードしており、どのようなエラーがどこで出たのかすら書かれていないのでは、適切な回答を得るのは厳しいでしょう。「書き込みのマナーについて」や「質問投稿ウィザード」を参考にして、ご質問内容を分かりやすくしていただけますように、お願いいたします。
管理人様、大変申し訳ございません。
クライアントからWebDavサーバへのアップロードは
Imports System
Imports System.Net
Imports System.Text
Public Class Uploader
Shared Sub Main
Dim url As String = "http://localhost/upload.aspx"
Dim file As String = "c:\test.bmp"
Dim wc As WebClient = new WebClient()
Dim ret As byte() = wc.UploadFile(url, file)
Dim result As String = Encoding.ASCII.GetString(ret)
wc.Dispose()
Console.WriteLine(result)
End Sub
End Class
こんなふうにしました。

アップロードされたファイルを受け取るASP.NETページは
<Script language="vb" runat=server>
Sub Page_Load(sender As Object, e As EventArgs)
Dim posted As HttpPostedFile = Request.Files(0)
posted.SaveAs( _
"c:\UploadedFiles\" _
& System.IO.Path.GetFileName(posted.FileName))
Response.Write(posted.ContentLength)
End Sub
</Script>

でも、自動的に一定間隔置き繰り返してキャプチャされたファイルをサーバへ転送しようとしてるんですが、その間隔が110秒以下だと
Dim ret As byte() = wc.UploadFile(url, file)ここでエラーが生じて止まってしまうんです。

WebClient.UploadFileメソッドを使うとひとつのファイルしか転送できないのは分かってますが、連続アップロードするときはどうすればいいか分かりません。
画像ファイルは普通3000KBです。

これと、また別の件ですが、
ファイルを転送するときHTTPのヘッダー情報を取得し、ログに出力したいです。HttpWebRequestとHttpWebResponseを使った方法でサーバへアップロードしたほうがいいですか?WebClientを使った方法ではプロトコルエラーの時のステータスコードの取得はできないんですか?
長くなりまして本当にすみません。
皆さんよろしくお願いいたします。
■No18382に返信(park saiさんの記事)
相変わらずどのようなエラーが出たのか書かれていませんので、よく分かりませんが、非同期に接続するか、スレッド化ということになるかもしれません。ともかく、デバッグをしてみてください。
> これと、また別の件ですが、
> ファイルを転送するときHTTPのヘッダー情報を取得し、ログに出力したいです。HttpWebRequestとHttpWebResponseを使った方法でサーバへアップロードしたほうがいいですか?WebClientを使った方法ではプロトコルエラーの時のステータスコードの取得はできないんですか?
> 長くなりまして本当にすみません。
> 皆さんよろしくお願いいたします。

管理人さんもおっしゃっていますが、書き込みのマナーには
>質問は一つの投稿に一つだけにしてください。複数の質問をする場合は、複数の投稿をしてください。
ともあります。

エラーの内容は何ですか?
今日はHttpWebRequestとHttpWebResponseを使った方法で転送してみました。この方法ではプロトコルエラーが生じたときにそのコード番号を知るために使いました。
エラーメッセージは:
IOException: 転送接続にデータを書き込めません: 確立された接続がホスト コンピュータのソウトウェアによって中止されました。
WebExceptionの応答ステータスは:SendFailureです。

連続転送する時間間隔を10秒、30秒、60秒にして見たら三つとも同じ結果でした。
つまり、一回置きに上に書いたエラーが生じます。転送→エラー→転送→エラー

WebClientを使った方法で転送したときはwebclient要求で例外が発生しました。というエラーメッセージが見えました。ファイルを転送するのに少しは時間がかかるのは分かりますが、60秒もうまく転送できないのはなぜかわかりません。

ファイルを受ける側ASP.netで
Response.Write(posted.ContentLength)の後にResponse.Closeしてないから上のエラーが生じる場合もありますでしょうか?今サーバはいじれない状態にあるから、、、教えてください。

どうぞ、よろしくお願いいたします。
何度も同じことを言わなければならないのは辛いですが(もう言いません)、なぜデバッグをなさらないのでしょうか?

> ファイルを受ける側ASP.netで
> Response.Write(posted.ContentLength)の後にResponse.Closeしてないから上のエラーが生じる場合もありますでしょうか?今サーバはいじれない状態にあるから、、、教えてください。

ローカルコンピュータ(あるいは別のテストサーバーでも良いですが)でサーバーを立てて調べることはできますよね?
何度も同じ質問で本当に申し訳ございませんでした。
もちろんデバックをやりながらテストしてみてるんです。
今日はファイル受ける側のASP.netの
Response.Write(posted.ContentLength)の後に  Response.Close()を追加してみました。
HttpWebRequestとHttpWebResponseを使った方法とWebClientを使った方法でやってみました。両方法とも転送する時間を短くして10秒にしてみたんですが、ファイルはサーバへちゃんと転送はできるんですが、WebException.statusの値がconnectioncloseというエラーができます。エラーメッセージとしては(基になる接続が閉じられました。接続が予期せずに閉じられました。)

なぜ、こんなエラーが生じると思いますか???強制的にレスポンスをクローズしたらだめでしょうか?

いい方法はないでしょうか?

DOBON.NET | プログラミング道 | プログラミング掲示板