C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: C# .NET のファイルアップロード


(過去ログ 55 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■31297 / inTopicNo.1)  C# .NET のファイルアップロード
  
□投稿者/ みゆき (1回)-(2009/01/20(Tue) 12:21:38)

分類:[.NET 全般] 

初めまして。
VS2005 ASP.NET C#でファイルをアップロードさせたいのですが、
アップロード先をネットワーク越しのサーバのディレクトリにしたいのですが、
エラーが出てうまくいきません。
お手数ですが、どうやればいいのか、教えていただけないでしょうか?

HttpPostedFile posted = Request.Files["userfile"];

if (posted.FileName != "")
{
posted.SaveAs(
"\\10.0.0.18\\ETC\\" ← このディレクトリ指定がうまくいきません。
+ System.IO.Path.GetFileName(posted.FileName));
}
else
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "警告", "<script language='JavaScript'> alert('ファイル名が入力されていません') </script>");
return;
}

引用返信 編集キー/
■31299 / inTopicNo.2)  Re[1]: C# .NET のファイルアップロード
□投稿者/ aetos (74回)-(2009/01/20(Tue) 12:33:37)
No31297 (みゆき さん) に返信
> posted.SaveAs(
> "\\10.0.0.18\\ETC\\" ← このディレクトリ指定がうまくいきません。
> + System.IO.Path.GetFileName(posted.FileName));

文字列は @ をつけなければ、\ を \\ と書く必要があります。
UNC は \\server\share と書きますから、\ を \\ にすれば、
"\\\\server\\share"
と書かねばなりません。
先頭に @ をつけると、
@"\\server\share"
と、簡潔に書くことができます。
引用返信 編集キー/
■31302 / inTopicNo.3)  Re[2]: C# .NET のファイルアップロード
□投稿者/ みゆき (2回)-(2009/01/20(Tue) 12:42:28)
早速のご返信ありがとうございます。
ご指摘の通りおこなってみましたが、
「ネットワークパスが見つかりません」となりました。
そこで、
@"\\server\share\\"
としてみたのですが、「アクセスが拒否されました」と出ました。
何かセキュリティ的なものがあるのでしょうか?ちなみに
エクスプローラーからでしたら、簡単にコピー・移動できてしまいます。


No31299 (aetos さん) に返信
> ■No31297 (みゆき さん) に返信
>> posted.SaveAs(
>> "\\10.0.0.18\\ETC\\" ← このディレクトリ指定がうまくいきません。
>> + System.IO.Path.GetFileName(posted.FileName));
>
> 文字列は @ をつけなければ、\ を \\ と書く必要があります。
> UNC は \\server\share と書きますから、\ を \\ にすれば、
> "\\\\server\\share"
> と書かねばなりません。
> 先頭に @ をつけると、
> @"\\server\share"
> と、簡潔に書くことができます。
引用返信 編集キー/
■31308 / inTopicNo.4)  Re[3]: C# .NET のファイルアップロード
□投稿者/ まさる (51回)-(2009/01/20(Tue) 13:18:18)
まさる さんの Web サイト
No31302 (みゆき さん) に返信
> @"\\server\share\\"
> としてみたのですが、「アクセスが拒否されました」と出ました。
> 何かセキュリティ的なものがあるのでしょうか?

ASP.NETが動作するアカウントがあるので、アップロードしたいフォルダに対して、そのアカウントの書き込み権限を付加してやる必要があります。

間違ってもアカウントにAdministrator権限を与えてはいけませんよ。

[参考になりそうなページ]
ASP.NET の実行に使用するカスタム アカウントの作成方法
http://www.microsoft.com/japan/msdn/net/security/secnetht01.aspx
引用返信 編集キー/
■31317 / inTopicNo.5)  Re[4]: C# .NET のファイルアップロード
□投稿者/ みゆき (3回)-(2009/01/20(Tue) 14:37:43)
まさるさん、ありがとうございました。
うまくできました!感謝・感謝です!

ところで、もう一つ質問があるのですが、
保存しようとする、同名のファイル名チェックはどのように
行えばいいのでしょうか?
お手数ですが、ご教示いただければ幸いです。

>>@"\\server\share\\"
>>としてみたのですが、「アクセスが拒否されました」と出ました。
>>何かセキュリティ的なものがあるのでしょうか?
>
> ASP.NETが動作するアカウントがあるので、アップロードしたいフォルダに対して、そのアカウントの書き込み権限を付加してやる必要があります。
>
> 間違ってもアカウントにAdministrator権限を与えてはいけませんよ。
>
> [参考になりそうなページ]
> ASP.NET の実行に使用するカスタム アカウントの作成方法
> http://www.microsoft.com/japan/msdn/net/security/secnetht01.aspx
引用返信 編集キー/
■31337 / inTopicNo.6)  Re[5]: C# .NET のファイルアップロード
□投稿者/ まさる (53回)-(2009/01/20(Tue) 15:50:15)
まさる さんの Web サイト
No31317 (みゆき さん) に返信
> ところで、もう一つ質問があるのですが、
> 保存しようとする、同名のファイル名チェックはどのように
> 行えばいいのでしょうか?
> お手数ですが、ご教示いただければ幸いです。

ネットワーク越しでなく、通常時と同様に出来ると思います。

手順としては、

1. File.Existsメソッドでファイル有無をチェックする。
2. 1で同名ファイルが存在しなかった場合、ファイルを FileMode.CreateNew で作成する。
3. 1と2の間で同名ファイルが作られてしまっていた場合、IOExceptionが発生するので、
  catchして適切に処理する。

といった感じです。

#有識者の皆様、抜けが合ったらフォローお願いします。
引用返信 編集キー/
■31338 / inTopicNo.7)  Re[6]: C# .NET のファイルアップロード
□投稿者/ επιστημη (1550回)-(2009/01/20(Tue) 15:54:32)
επιστημη さんの Web サイト
> 1. File.Existsメソッドでファイル有無をチェックする。
> 2. 1で同名ファイルが存在しなかった場合、ファイルを FileMode.CreateNew で作成する。
> 3. 1と2の間で同名ファイルが作られてしまっていた場合、IOExceptionが発生するので、
>   catchして適切に処理する。

同名ファイルが既存であるときいきなりCreateFileしても
やっぱりcatchされっから(適切に処理されるなら)[1]は要らなくね? とか。


引用返信 編集キー/
■31341 / inTopicNo.8)  Re[7]: C# .NET のファイルアップロード
□投稿者/ まさる (54回)-(2009/01/20(Tue) 15:59:10)
まさる さんの Web サイト
No31338 (επιστημη さん) に返信
>>1. File.Existsメソッドでファイル有無をチェックする。
>>2. 1で同名ファイルが存在しなかった場合、ファイルを FileMode.CreateNew で作成する。
>>3. 1と2の間で同名ファイルが作られてしまっていた場合、IOExceptionが発生するので、
>>  catchして適切に処理する。
>
> 同名ファイルが既存であるときいきなりCreateFileしても
> やっぱりcatchされっから(適切に処理されるなら)[1]は要らなくね? とか。

う〜ん、私としては1.のチェックもコードに書きたい方なんですよね。
意味合いがぱっと見て分かるかなーと。


引用返信 編集キー/
■31343 / inTopicNo.9)  Re[8]: C# .NET のファイルアップロード
□投稿者/ はつね (926回)-(2009/01/20(Tue) 16:12:18)
はつね さんの Web サイト
No31341 (まさる さん) に返信
> >>1. File.Existsメソッドでファイル有無をチェックする。
> >>2. 1で同名ファイルが存在しなかった場合、ファイルを FileMode.CreateNew で作成する。
> >>3. 1と2の間で同名ファイルが作られてしまっていた場合、IOExceptionが発生するので、
> >>  catchして適切に処理する。
>>
>>同名ファイルが既存であるときいきなりCreateFileしても
>>やっぱりcatchされっから(適切に処理されるなら)[1]は要らなくね? とか。
>
> う〜ん、私としては1.のチェックもコードに書きたい方なんですよね。
> 意味合いがぱっと見て分かるかなーと。

チェックしてからCreateするまでの間に別セッションでCreateされたりとか考慮するとCreateFileでの既存エラーの対応は必要ですね。


引用返信 編集キー/
■31345 / inTopicNo.10)  Re[9]: C# .NET のファイルアップロード
□投稿者/ まさる (55回)-(2009/01/20(Tue) 16:32:23)
まさる さんの Web サイト
No31343 (はつね さん) に返信
> チェックしてからCreateするまでの間に別セッションでCreateされたりとか考慮するとCreateFileでの既存エラーの対応は必要ですね。

ですね。

ところで、ネットワーク越しのサーバのディレクトリにファイルを作りたいってことなんで、
ネットワーク越しの場合特有の、気を付けなきゃならないこともありそうな気がします。

この辺りどうなんでしょうね?
引用返信 編集キー/
■31370 / inTopicNo.11)  Re[6]: C# .NET のファイルアップロード
□投稿者/ みゆき (4回)-(2009/01/20(Tue) 20:38:28)
まさるさんありがとうございます。
無事思ったような動きができました。
本当にありがとうございました。

> ■No31317 (みゆき さん) に返信
>>ところで、もう一つ質問があるのですが、
>>保存しようとする、同名のファイル名チェックはどのように
>>行えばいいのでしょうか?
>>お手数ですが、ご教示いただければ幸いです。
>
> ネットワーク越しでなく、通常時と同様に出来ると思います。
>
> 手順としては、
>
> 1. File.Existsメソッドでファイル有無をチェックする。
> 2. 1で同名ファイルが存在しなかった場合、ファイルを FileMode.CreateNew で作成する。
> 3. 1と2の間で同名ファイルが作られてしまっていた場合、IOExceptionが発生するので、
>   catchして適切に処理する。
>
> といった感じです。
>
> #有識者の皆様、抜けが合ったらフォローお願いします。
解決済み
引用返信 編集キー/
■31374 / inTopicNo.12)  Re[7]: C# .NET のファイルアップロード
□投稿者/ ちゃっぴ (197回)-(2009/01/20(Tue) 23:49:14)
ちゃっぴ さんの Web サイト
> ところで、ネットワーク越しのサーバのディレクトリにファイルを作りたいってことなんで、
> ネットワーク越しの場合特有の、気を付けなきゃならないこともありそうな気がします。

基盤の構築 (設定) ならともかく、coding においては考慮不要ですね。
そのための API (.NET Framework) ですから。

解決済み
引用返信 編集キー/
■31381 / inTopicNo.13)  Re[8]: C# .NET のファイルアップロード
□投稿者/ まさる (57回)-(2009/01/21(Wed) 09:00:08)
まさる さんの Web サイト
No31374 (ちゃっぴ さん) に返信
>>ところで、ネットワーク越しのサーバのディレクトリにファイルを作りたいってことなんで、
>>ネットワーク越しの場合特有の、気を付けなきゃならないこともありそうな気がします。
>
> 基盤の構築 (設定) ならともかく、coding においては考慮不要ですね。
> そのための API (.NET Framework) ですから。
>

なるほど。

例外さえ適正に処理していれば、あとは気にしなくてもいいわけですね。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -