首页 新闻 会员 周边

如何实现同时上传多个文件?

0
悬赏园豆:20 [已关闭问题]

最近一个项目,需要同时上传多个文件。我尝试用javascript写了个,但是提交后后台得不到数据。

不知道为什么,请高手指点一下。

代码如下:

 

Code

 

下面是按钮的click事件代码:

 

Code
天堂口的主页 天堂口 | 小虾三级 | 园豆:514
提问于:2009-11-22 11:53
< >
分享
其他回答(2)
0

HttpPostedFile hf = Request.Files[0];
这里只能获取第一个

+ runat=server

---給你做了例子

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxUpload.aspx.cs" Inherits="AjaxUpload" %>

<!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" src="JS/jquery-1.3.2.min.js"></script>

    <script language="javascript" type="text/javascript" src="JS/ajaxFileUpload.js"></script>

    <script language="javascript" type="text/javascript" src="JS/MuUpload.js">
 
    </script>

</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:FileUpload ID="file" runat="server" Style="display: none;" />
            <input type="button" id="btn_submit" value="提交" />
            <a href="#" id="a_add">增加</a>
            <div id="content">
            </div>
        </div>
    </form>
</body>
</html>
--js為 jquery

--為ajaxFileUpload.js

--js  ---  MuUpload.js的內容

   $(document.body).ready(function()
    {
      $("#a_add").click(function()
      {
        var id=Math.round(Math.random()*100000);
        var fid="FILE_"+id;
        var sid="SPAN_"+id;
        var html="<p id='p_" +id +"'><input type=file id='"+fid+"'  name='name_"+fid+"'/> <span id='"+sid+"'></span><span id='DELETE_"+sid+"' style='cursor:pointer;color:red;font-size:8pt;' pid='p_"+id+"' onclick='DeleteFILE(this)'>刪除</span></p>";
        $("#content").append(html);
      });
     
      $("#btn_submit").click(function()
      {
        $("#content").find("input[type=file]").each(function()
        {
          var fId=$(this).attr("id");
          var mId=fId.replace("FILE_","SPAN_");
          $.ajaxFileUpload(
       {
           url:'upload.aspx',
           secureuri:false,
           dataType:'json',
           async:false,
           fileElementId:fId,
           beforeSend:function()
           {
            $("#"+mId).html("正在上傳,請稍後...");
 
          },
          success: function (data)
       { 
         if(data.error!="")
         {
         $("#"+mId).html(data.error);
 
          }
         else
         {
            $("#"+mId).html("操作成功");
            }
       },
       error:function()
       {
              $("#"+mId).html("出現錯誤");
       }
          });
         });
        return false;
     });
});
function DeleteFILE(obj)
{
  var id=$(obj).attr("pid");
  $("#"+id).remove();
}

---後台上傳文件的地方

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class Upload : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {

        string msg = "";
        string error = "";

        if (Request.Files.Count > 0)
        {
            HttpPostedFile file = Request.Files[0];
            double f = 0;
            if (file.ContentLength == 0)
            {
                error = "文件不能為空";
            }
            else
            {
                f = file.ContentLength / 1024;
                if (f >= 15000)
                {
                    error = "文件須小於10M";
                }
                else
                {
                    string filePath = "";
                    string fileExt = Path.GetExtension(file.FileName);
                    Random rd = new Random();
                    string loadFilePath = Server.MapPath("~/AJAX/");
                    string FileName = DateTime.Now.ToString("yyyyMMddHHmmss") + WebCom.RandomnAlpha(8) + fileExt;
                    file.SaveAs(loadFilePath + FileName);
                    int k = 1;
                    error = (k == 0) ? "已經上載文件." : "";
                }
            }

        }
        else
        {
            error = "發生未知異常";
        }

        string result = "{ error:'" + error + "', msg:'" + msg + "'}";
        Response.Write(result);
        Response.End();
    }
}

 

woody.wu | 园豆:3621 (老鸟四级) | 2009-11-22 11:58
使用javascript 怎么加runat=server啊????
支持(0) 反对(0) 天堂口 | 园豆:514 (小虾三级) | 2009-11-22 22:27
@天堂口:javascript是客户脚本代码的,和c#语言根本不一样。这两种不同的语言你怎么能放在一起呢
支持(0) 反对(0) boboisboy | 园豆:346 (菜鸟二级) | 2009-11-23 11:37
0

即时一次请求多个文件上传,也是一个文件一个文件上传到服务器的,所以服务器端你可以使用HttpPostedFile这个类来处理上传的文件的,你可以取Request.Files这个集合进行判断,如果Request.Files.Count大于0,然后使用for循环进行取出每一个文件对象进行保存即可。

注意一点:在使用Form进行数据提交的时候,需要添加name属性,<input type="file"  id="file0" />这样子在服务器端是获取不到的,需要加上那么属性<input type="file"  id="file0" name="file0" />

西越泽 | 园豆:10775 (专家六级) | 2009-11-22 16:14
0

我将楼主的代码敲了下,改了两个地方:

1.将第一个li中的控件换成服务器控件

            <li>
                <asp:FileUpload runat="server" ID="file0" />
            </li>

2.像卡索说的,为每个上传控件加个name.

        <script type="text/javascript">
            function add_file(){
                var li = document.createElement("li");
               
                var input_file = document.createElement("input");
                input_file.setAttribute("type","file");
                var id="Math"+Math.random()*1000;
                input_file.setAttribute("id",id);
                input_file.setAttribute("name",id);
               
                li.appendChild(input_file);
               
                document.getElementById("filelist").appendChild(li);
            }
           
        </script>

我把后台代码改了下,可以看到文件名称,如下:

    protected void Save_Click(object sender, EventArgs e)
    {
        Response.Write(Request.Files.Count.ToString()+"<br/>");
        for (int i = 0; i < Request.Files.Count; i++)
        {
            Response.Write("文件名:"+Request.Files[i].FileName+"<br/>");
        }
    }

结果:

2
文件名:新建 文本文档 (2).txt
文件名:新建 文本文档 (3).txt

Pwd | 园豆:158 (初学一级) | 2009-11-23 16:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册