- - PR -
ファイルアップロード
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-12 00:27
ASP.NET(C#)でファイルのアップロードについてお教えください。
ある書籍に記載されていたソースを利用しファイルのアップロードを ためしているのですが、 下記ソースの Div1.InnerText = f.Name; のところで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 とエラーが出ます。ファイル名がちゃんと指定されていないのが原因ではないかと 思うのですが、未熟者の為、解決方法がわかりません。お分かりになる方がいらっしゃい ましたらお教えください。 ファイルの参照にはツールボックスの「HTML」カテゴリーの「File Field」と HTMLサーバコントロールを利用しています。 ###以下ソースです。 protected System.Web.UI.WebControls.Button Button5; protected System.Web.UI.HtmlControls.HtmlGenericControl Div1; protected System.Web.UI.HtmlControls.HtmlGenericControl Div2; protected System.Web.UI.HtmlControls.HtmlGenericControl Div3; protected System.Web.UI.HtmlControls.HtmlInputFile File1; private void Button5_Click(object sender, System.EventArgs e) { HttpPostedFile file = File1.PostedFile; System.IO.FileInfo f = new System.IO.FileInfo(file.FileName); Div1.InnerText = f.Name; Div2.InnerText = file.ContentType; Div3.InnerText = file.ContentLength.ToString(); System.IO.BinaryWriter writer = new System.IO.BinaryWriter(System.IO.File.Create(Server.MapPath("/img/" + f.Name))); byte[] tmp = new byte[4096]; System.IO.Stream fin = file.InputStream; while((fin.Read(tmp, 0, 4096) != 0)) writer.Write(tmp); writer.Close(); } [ メッセージ編集済み 編集者: みゅみゅ 編集日時 2005-08-12 00:28 ] | ||||||||
|
投稿日時: 2005-08-12 07:12
『ある書籍』ではなく、書名やISBN、Amazonなどの書店へのリンクなど、書籍を限定してください。また、ページ番号や章番号まで書くようにしてください。 引用されているものでは動かすことが出来ません。実際に動かして、試すために必要な情報です。
このエラー(ヌルポと呼ばれたりします)の場合、どのオブジェクトが無いのか、はっきりさせてください。対象の行では、DIV1 というオブジェクトと、f というオブジェクトの2つがあります。どちらかが NULL (VB では Nothing)になっています。どちらか、はっきりさせてください。 コードを見ると、おそらく f の方だと思うのですが、、、 > System.IO.FileInfo f = new System.IO.FileInfo(file.FileName); ファイルのアップロードですよね?このコードは、クライアント、サーバの、どちらで動いていますか? アップロードと言うことは、ファイルはクライアントにあって、サーバにはないはずです。そのため、FileInfo ではとれないと思うのですが??? _________________ | ||||||||
|
投稿日時: 2005-08-12 08:42
Jitta様 失礼しました。情報不足でした。
書籍は 技術評論社出版の「C#.NET プログラミングマニュアル」です。273ページになります。 http://www.gihyo.co.jp/books/syoseki.php/4-7741-1553-3 ASP.NET(C#)を利用しており、 コードはサーバ側に置いています。 アップロードを行いたいファイルは画像ファイルで、クライアントから ブラウザーでアップロードすることになります。 ブラウザーに表示されるエラーは下記となります。 (エラー表示のディレクトリパスは変更させて頂いています。) ### オブジェクト参照がオブジェクト インスタンスに設定されていません。 説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 ソース エラー: 行 187: HttpPostedFile file = File1.PostedFile; 行 188: System.IO.FileInfo f = new System.IO.FileInfo(file.FileName); 行 189: Div1.InnerText = f.Name; 行 190: Div2.InnerText = file.ContentType; 行 191: Div3.InnerText = file.ContentLength.ToString(); スタック トレース: [NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。] admin.edit.Button5_Click(Object sender, EventArgs e) in \\\\aaaa\\bbb$\\cccc\\ddd\\edit.aspx.cs:189 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33 System.Web.UI.Page.ProcessRequestMain() +1277 ###### 以上がエラー情報です。 オブジェクトのDIV1とfのどちらが原因かははっきり書かれておりません。 ファイル名の取得方法とFileInfoについて調べてみます。 よろしくお願いいたします。 [ メッセージ編集済み 編集者: みゅみゅ 編集日時 2005-08-12 08:58 ] | ||||||||
|
投稿日時: 2005-08-12 09:12
の解説通り、この時点ではファイルはサーバのディスクに存在しません。あくまでメモリに存在するだけです。 ですからFileInfoで情報を取ることはできません。 一度しっかりHttpPostedFileクラスをよく調べてみましょう。
それを調べるのがデバッグの第一歩なのですが。 | ||||||||
|
投稿日時: 2005-08-12 10:46
HttpPostedFileクラス型のオブジェクト(例のソースだとFile1.PostedFileで取れるオブジェクト)のSaveAs()メソッドを使って一旦サーバーのローカルディスク領域に保存したりすると良いんじゃないでしょうか。
InputStreamプロパティでも読めるのかな。
.NETでは"ぬるり"じゃないんでしょうか。 |
1