首页 新闻 会员 周边

ASP.NET中通过Button按钮来触发HTML文件上传控件(INPUT(File))选择文件上传

0
悬赏园豆:50 [已关闭问题] 关闭于 2009-12-24 11:56

我有个网页想通过点击一个按钮(Button)来触发HTML文件上传控件(INPUT(type=File))让客户选择文件而不是直接点击文件上传控件来获取文件,请问该如何实现啊?

问题补充: 不好意思,刚才说的不是很清楚。我的意思是,有个页面上面放一个文件上传控件(INPUT(type=File))但是设置它是隐藏的,这样用户就不能通过点击这个控件来选择文件了,而是通过点击页面上的一个BUTTON来触发文件上传控件的点击事件打开文件选择对话框让用户选择要读取的文件,并且通过流或者其他方式在服务器端读取该文件(假设是文本文件)将文件的内容存入服务器上的数据库内。就是说用户不想通过点击两次控件来完成这个操作他就是想一步(点击按钮)就完成了。 我本来想在隐藏文件里面写那个按钮的点击事件然后在里面通过JS注册一个JS函数来在前台代码中触发文件上传控件的点击事件来打开文件选择对话框,但是这是不行的,因为在这个JS事件执行以前隐藏代码就已经执行过了,这就导致因为前台打开文件选择对话框的操作还没发生也就还没有选择文件导致隐藏代码里面读取不到文件内容。主要代码大体是这样的: Public Sub RunUpLoadClick() ClientScript.RegisterStartupScript(Me.GetType(), "{A38F23DD-431E-4c43-B6C0-58504E48771F}", "OpenTxtFile();", True) If File1.PostedFile.InputStream.Length < 1 Then Call ServerFun.ShowMessage(Me, "上傳文件內容不能為空,請重新選擇要上傳的文件!") Exit Sub End If 。。。。。。。 end sub 前台JS: function OpenTxtFile() { var objFile = document.getElementById("File1");//File1就是那个文件上传控件 objFile.click(); } 这样每次隐藏代码里面检测到的都是上传文件为空!请问大家有什么好的解决方法吗?帮帮我我吧。。。
PnkZ的主页 PnkZ | 初学一级 | 园豆:200
提问于:2009-12-09 11:54
< >
分享
所有回答(4)
0

客户选择文件而不是直接点击文件上传控件来获取文件?不明白?

 紅色標記處必須的。選擇文件後直接提交,你可以擴展一下,用iframe來實現無刷新的。

<!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>
<script language="javascript" type="text/javascript">
// <!CDATA[

function btn_onclick()
{

var keyID=Math.round(Math.random()*100000)+"FILE";
            var text=document.createElement("input");
            text.setAttribute("name",keyID);
            text.setAttribute("id",keyID);
            text.type="file";
            text.setAttribute("onpropertychange","UploadFile()");
            document.forms["form1"].appendChild(text);
           
}
function UploadFile()
{
  document.forms["form1"].submit();  
}

// ]]>
</script>
</head>
<body>
    <form id="form1" runat="server" enctype="multipart/form-data">
        <div>
            <input type="button" id="btn" name="btn" value="創建" onclick="return btn_onclick()" />
           </div>
    </form>
</body>
</html>

woody.wu | 园豆:3621 (老鸟四级) | 2009-12-09 12:01
不好意思,刚才说的不是很清楚。我的意思是,有个页面上面放一个文件上传控件(INPUT(type=File))但是设置它是隐藏的,这样用户就不能通过点击这个控件来选择文件了,而是通过点击页面上的一个BUTTON来触发文件上传控件的点击事件打开文件选择对话框让用户选择要读取的文件,并且通过流或者其他方式在服务器端读取该文件(假设是文本文件)将文件的内容存入服务器上的数据库内。就是说用户不想通过点击两次控件来完成这个操作他就是想一步(点击按钮)就完成了。 我本来想在隐藏文件里面写那个按钮的点击事件然后在里面通过JS注册一个JS函数来在前台代码中触发文件上传控件的点击事件来打开文件选择对话框,但是这是不行的,因为在这个JS事件执行以前隐藏代码就已经执行过了,这就导致因为前台打开文件选择对话框的操作还没发生也就还没有选择文件导致隐藏代码里面读取不到文件内容。主要代码大体是这样的: Public Sub RunUpLoadClick() ClientScript.RegisterStartupScript(Me.GetType(), "{A38F23DD-431E-4c43-B6C0-58504E48771F}", "OpenTxtFile();", True) If File1.PostedFile.InputStream.Length < 1 Then Call ServerFun.ShowMessage(Me, "上傳文件內容不能為空,請重新選擇要上傳的文件!") Exit Sub End If 。。。。。。。 end sub 前台JS: function OpenTxtFile() { var objFile = document.getElementById("File1");//File1就是那个文件上传控件 objFile.click(); } 这样每次隐藏代码里面检测到的都是上传文件为空! 请问大家有什么好的解决方法吗?帮帮我我吧。。。
支持(0) 反对(0) PnkZ | 园豆:200 (初学一级) | 2009-12-09 13:06
@红星拖拉机:已更新
支持(0) 反对(0) woody.wu | 园豆:3621 (老鸟四级) | 2009-12-09 14:13
0

用户选择文件时,做一个Ajax请求,直接上传选定的文件。类似的看163或Hotmail邮件附件处理

邀月 | 园豆:25475 (高人七级) | 2009-12-09 12:10
0

如果技术仅限于HTML+JS的话,恐怕没有什么好方法,一些浏览器因为安全因素直接就给你禁掉了

最好还是用flash等做上传,美观又可定制

LanceZhang | 园豆:857 (小虾三级) | 2009-12-09 17:44
0

遇到同样的问题,前台JS:function OpenTxtFile() {          var objFile = document.getElementById("File1");//File1就是那个文件上传控件     objFile.click(); }

小华2011 | 园豆:206 (菜鸟二级) | 2013-09-21 14:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册