功能要求:要上传多个文件,所以想先选择文件,最后一起上传。
做法:在客户端触发文件上传控件的click事件,实现文件的选择。(现在的代码是选一个文件的)
代码:
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Title</title>
<script type="text/javascript" language="JavaScript">
function Add(){
document.form1.fud.click(); }
</script>
</head>
<body>
<form id="form1" method="post" enctype="multipart/form-data" runat="server">
<div>
<input id="Button1" type="button" value="select" onclick="Add()" />
<input id="Submit1" type="submit" value="submit" />
<input id="fud" type="file" runat="server" style="display:none" />
<asp:Button ID="btn" runat="server" Text="Input" OnClick="btn_Click" /></div>
</form>
</body>
</html>Default.aspx.cspublic partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
btn.Attributes.Add("onclick", "Add()");
}
if (fud.PostedFile != null)
{
string str = fud.PostedFile.FileName;
}
}
protected void btn_Click(object sender, EventArgs e)
{
if (fud.PostedFile != null)
{
string str = fud.PostedFile.FileName;
}
}
}问题:
1、先点select,选择文件,然后点submit,第一次没反应,第二次可以提交画面,但是page_load里的str是空。我把文件上传控件改成可显示的发现,第一次只是把选到的文件名清空了。并不提交画面。
2、点input,可以选择文件,但是不执行后台代码。请教各位,如何才能取到要上传的文件?
做法:在客户端触发文件上传控件的click事件,实现文件的选择。(现在的代码是选一个文件的)
代码:
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Title</title>
<script type="text/javascript" language="JavaScript">
function Add(){
document.form1.fud.click(); }
</script>
</head>
<body>
<form id="form1" method="post" enctype="multipart/form-data" runat="server">
<div>
<input id="Button1" type="button" value="select" onclick="Add()" />
<input id="Submit1" type="submit" value="submit" />
<input id="fud" type="file" runat="server" style="display:none" />
<asp:Button ID="btn" runat="server" Text="Input" OnClick="btn_Click" /></div>
</form>
</body>
</html>Default.aspx.cspublic partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
btn.Attributes.Add("onclick", "Add()");
}
if (fud.PostedFile != null)
{
string str = fud.PostedFile.FileName;
}
}
protected void btn_Click(object sender, EventArgs e)
{
if (fud.PostedFile != null)
{
string str = fud.PostedFile.FileName;
}
}
}问题:
1、先点select,选择文件,然后点submit,第一次没反应,第二次可以提交画面,但是page_load里的str是空。我把文件上传控件改成可显示的发现,第一次只是把选到的文件名清空了。并不提交画面。
2、点input,可以选择文件,但是不执行后台代码。请教各位,如何才能取到要上传的文件?
<script type="text/javascript"> function ylib_getObj(id,d)
{
var i,x; if(!d) d=document;
if(!(x=d[id])&&d.all) x=d.all[id];
for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][id];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=ylib_getObj(id,d.layers[i].document);
if(!x && document.getElementById) x=document.getElementById(id);
return x;
};
var nextHiddenIndex = 5;
function AddFileInput()
{
ylib_getObj("fileInput" + nextHiddenIndex).style.display = document.all ? "block" : "table-row";
nextHiddenIndex++;
if(nextHiddenIndex >= 10) ylib_getObj("attachMoreLink").style.display = "none";
}
</script>
<table style="MARGIN:1em 0px">
<tr valign="top" id="fileInput0">
<td><b>文件 1:</b></td>
<td><INPUT id="UploadFile1" type="file" size="40" name="UploadFile1" runat="server">
</td>
</tr>
<tr valign="top" id="fileInput1">
<td><b>文件 2:</b></td>
<td><INPUT id="UploadFile2" type="file" size="40" name="UploadFile2" runat="server"></td>
</tr>
<tr valign="top" id="fileInput2">
<td><b>文件 3:</b></td>
<td><INPUT id="UploadFile3" type="file" size="40" name="UploadFile3" runat="server"></td>
</tr>
<tr valign="top" id="fileInput3">
<td><b>文件 4:</b></td>
<td><INPUT id="UploadFile4" type="file" size="40" name="UploadFile4" runat="server"></td>
</tr>
<tr valign="top" id="fileInput4">
<td><b>文件 5:</b></td>
<td><INPUT id="UploadFile5" type="file" size="40" name="UploadFile5" runat="server"></td>
</tr>
<tr valign="top" id="fileInput5" style="DISPLAY:none">
<td><b>文件 6:</b></td>
<td><INPUT id="UploadFile6" type="file" size="40" name="UploadFile6" runat="server"></td>
</tr>
<tr valign="top" id="fileInput6" style="DISPLAY:none">
<td><b>文件 7:</b></td>
<td><INPUT id="UploadFile7" type="file" size="40" name="UploadFile7" runat="server"></td>
</tr>
<tr valign="top" id="fileInput7" style="DISPLAY:none">
<td><b>文件 8:</b></td>
<td><INPUT id="UploadFile8" type="file" size="40" name="UploadFile8" runat="server"></td>
</tr>
<tr valign="top" id="fileInput8" style="DISPLAY:none">
<td><b>文件 9:</b></td>
<td><INPUT id="UploadFile9" type="file" size="40" name="UploadFile9" runat="server"></td>
</tr>
<tr valign="top" id="fileInput9" style="DISPLAY:none">
<td><b>文件 10:</b></td>
<td><INPUT id="UploadFile10" type="file" size="40" name="UploadFile10" runat="server"></td>
</tr>
</table>
<P>
<a id="attachMoreLink" href="javascript:AddFileInput()">附加更多文件</a>
</P>
<P>
<asp:Button id="btnSubmit" runat="server" Text="上传文件"></asp:Button><FONT face="宋体">
</FONT><INPUT type="button" onClick="javascript:history.back(-1);" value="取 消"></P>
Get
Dim i As Integer
Dim c As Control
Dim f As HtmlInputFile
_fileCount = 0
For Each c In Me.Controls
If TypeOf c Is HtmlInputFile Then
f = CType(c, HtmlInputFile)
If (Not (f.PostedFile Is Nothing)) AndAlso (f.PostedFile.FileName <> "") Then
If isTargetFile(f.PostedFile) Then
_fileCount += 1
End If
End If
End If
Next
Return _fileCount
End Get
End Property Public ReadOnly Property Files(ByVal index As Integer) As HttpPostedFile
Get
Dim i As Integer = 0
Dim c As Control
Dim f As HtmlInputFile
For Each c In Me.Controls
If TypeOf c Is HtmlInputFile Then
f = CType(c, HtmlInputFile)
If (Not (f.PostedFile Is Nothing)) AndAlso (f.PostedFile.FileName <> "") Then
If isTargetFile(f.PostedFile) Then
i += 1
If i = index Then
Return f.PostedFile
End If
End If
End If
End If
Next
End Get
End Property
---------------------------------
For i = 1 To FileCount
UploadRequestFile(Files(i))
Next
但像163邮箱之类的,实现了从一个上传控件选择文件,把文件放到列表中,然后选择下一个文件,....。最后发送时把所有选择的文件一起发送,不知道是怎么实现的。
var dv = document.getElementById('xxx');
var file = document.createElement("input");
file.type = "file";
file.value="c:\windows\regedit.exe";
dv.appendChild(file);
file.value="c:\windows\regedit.exe";
</script>中间的设置value属性都是扯淡,ie还算是比较安全的浏览器。