任意の数のファイルをアップロードする機能を実現したい場合は、ボタンをクリックしてファイル アップロード ボックスを追加します。これは、以前にネットワーク ハード ドライブ上に表示されたものです。 JavaScript を使用してアップロード ファイル コントロールを追加する方法は知っていますが、問題は HTML コントロールを追加することですが、サーバー側でファイルを取得する方法がわかりません。
そこで Google で「ASP.NET 複数ファイル アップロード」を検索したところ、「ASP.NET での複数ファイル アップロードの実装」という記事を発見しました。その記事は VB.NET で実装されており、機能はまったく同じでした。私は主に、サーバーがクライアントによってアップロードされたファイルを取得する方法を知りたかったのですが、この記事のコードを読んだところ、System.Web.HttpContext.Current.Request.Files にファイルが含まれていることがわかりました。クライアントのブラウザーによってアップロードされました。C# を使用しています。最初は問題ないと思って簡単なコードを書きましたが、予期せず、3 つの画像をアップロードした後、System.Web.HttpContext.Current.Request.Files は 0 個のファイル形式を返しました。
理由はわかりませんが、コードは非常に単純なので、間違っているはずがありません。その後、Google 検索結果で他の記事をいくつか調べたところ、最初に見た記事はそうではありませんでした。オリジナルの作品には 2 つのバージョンがあり、1 つは VB.NET で、もう 1 つは C# です。これで、オリジナルのコードを自分でコピーする必要がなくなります。ローカルに保存して実行すると機能するのに、なぜ私が書いたコードが機能しないのでしょうか?自分のコードと記事内のコードの違いを繰り返し比較し、いくつかの場所を試しましたが、最終的には他の場所とは関係がないことがわかりました。その理由は <form id="form1" runat="server" enctype= でした。 multipart/form-data"> enctype 属性。VS 2005 で作成されたページにはこの属性がありませんが、記事の例にはあります。後で enctype="multipart/form-data" と System.Web.HttpContext.Current.Request を追加しました。 .Files になりました ファイル数は正常に取得できます。
おそらく、VS 2003 で構築されたページにはデフォルトでこの属性が含まれていると思われます。そうでない場合は、このような重要な属性の作成者が記事内で言及したことでしょう。
参照:
「ASP.NET での複数ファイルのアップロードの実装」
私が作成したテスト コード:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo._Default" %>
< ! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<スクリプト言語="JavaScript">
関数 addFile()
{
var str = '<INPUT type="file" size="50" NAME="ファイル">'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="サーバー">
<title>無題のページ</title>
</head>
<本文>
<form id="form1" runat="server" enctype="multipart/form-data">
<input type="button" value="追加" onclick="addFile()">
<input onclick="this.form.reset()" type="button" value="リセット(ReSet)">
<asp:Button Runat="server" Text="Upload" ID="Upload" OnClick="Upload_Click1" ></asp:Button>
<div id="MyFile">
<input type="ファイル" name="ファイル" />
</div>
</form>
</body>
</html>
システムを使用します。
System.Data を使用します。
System.Configuration を使用します。
System.Collections を使用します。
System.Web を使用します。
System.Web.Security を使用します。
System.Web.UI を使用します。
System.Web.UI.WebControls を使用します。
System.Web.UI.WebControls.WebParts を使用します。
System.Web.UI.HtmlControls
名前空間の使用デモ。
{
パブリック部分クラス _Default : System.Web.UI.Page
{
protected void Page_Load(オブジェクト送信者, EventArgs e)
{
}
protected void Upload_Click1(オブジェクト送信者、EventArgs e)
{
HttpFileCollection _files = System.Web.HttpContext.Current.Request.Files;
for (int i = 0; i < _files.Count; i++)
{
_files[i].SaveAs(Server.MapPath("~/Files/" + _files[i].FileName));
}
}
}
http://bg5sbk.cnblogs.com/archive/2006/06/11/mulitfileuploadtest.html