<form id="form1" runat="server" enctype="multipart/form-data" >
<div>
<p id="pFileList"><input type="file" size="50" name="file" id="hello"/></p>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
</form>protected void Button1_Click(object sender, EventArgs e)
{
HttpFileCollection hc = HttpContext.Current.Request.Files;
Response.Write(hc.Count);
string url = Request.Form["file"];
Response.Write(url);
int loop1;
NameValueCollection coll; //Load Form variables into NameValueCollection variable.
coll = Request.Form;
// Get names of all forms into a string array.
String[] arr1 = coll.AllKeys;
for (loop1 = 0; loop1 < arr1.Length; loop1++)
{
Response.Write("Form: " + arr1[loop1] + "<br>");
}
}需要加using System.Collections.Specialized;以上是我代码,我说下问题,我在页面上有HttpFileCollection来获取页面上的浏览控件
如果enctype属性是"multipart/form-data",则HttpFileCollection能获得页面上浏览控件的引用,但Request.Form["file"]不能得到浏览控上的值,(注意是值不是引用)
如果enctype属性改成另外两种,Request.Form["file"]能得到浏览控上的值,HttpFileCollection却不能获得页面上浏览控件的引用,
我查了MSDN,上面说的当enctype属性为multipart/form-data 或者application/x-www-form-urlencoded 时,Request.Form能被填充,我试了不行,这是为什呢?
<div>
<p id="pFileList"><input type="file" size="50" name="file" id="hello"/></p>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
</form>protected void Button1_Click(object sender, EventArgs e)
{
HttpFileCollection hc = HttpContext.Current.Request.Files;
Response.Write(hc.Count);
string url = Request.Form["file"];
Response.Write(url);
int loop1;
NameValueCollection coll; //Load Form variables into NameValueCollection variable.
coll = Request.Form;
// Get names of all forms into a string array.
String[] arr1 = coll.AllKeys;
for (loop1 = 0; loop1 < arr1.Length; loop1++)
{
Response.Write("Form: " + arr1[loop1] + "<br>");
}
}需要加using System.Collections.Specialized;以上是我代码,我说下问题,我在页面上有HttpFileCollection来获取页面上的浏览控件
如果enctype属性是"multipart/form-data",则HttpFileCollection能获得页面上浏览控件的引用,但Request.Form["file"]不能得到浏览控上的值,(注意是值不是引用)
如果enctype属性改成另外两种,Request.Form["file"]能得到浏览控上的值,HttpFileCollection却不能获得页面上浏览控件的引用,
我查了MSDN,上面说的当enctype属性为multipart/form-data 或者application/x-www-form-urlencoded 时,Request.Form能被填充,我试了不行,这是为什呢?
而必须使用Request.Files才能收集,同时可以收集到上传的文件内容如果enctype为application/x-www-form-urlencoded 时
Request.Form里是有File的值,但是不能得到上传的文件内容。
使用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。下表显示通用的编码类型。编码类型
说明
application/x-www-form-urlencoded
窗体数据被编码为名称/值对。这是标准的编码格式。
multipart/form-data
窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
text/plain
窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
http://www.w3.org/TR/html401/interact/forms.html#adef-enctype
////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// 得到上传文件的名字集合数组
/// </summary>
/// <param name="files">该页面的所有上传对象的集合</param>
/// <returns>返回文件名的集合数组</returns>
public static string[] GetFileName(HttpFileCollection files)
{ string[] FileNames = new string[files.Count];
if (files == null) return (string[])null;
for (int i = 0; i < files.Count; i++)
{ ///获取当前上载的文件
HttpPostedFile postedFile = files[i];
if (postedFile == null) continue;
///获取文件的名称和扩展名
string fileName = Path.GetFileNameWithoutExtension(postedFile.FileName);
string extension = Path.GetExtension(postedFile.FileName);
FileNames[i] = fileName + extension;
}
return FileNames;
}
里边包括文件内容和文件路径信息等.
====
填充文件集合的意思是,里边包括文件信息(路径,文件名等)包括文件内容(文件大小)