我数据库字段 "多附件上传地址" 中形式如下:
A:/aaa;B:/bbb;C:/ccc;
下载的时候怎么办? public string FormatString(string str)
    {
        str = str.Replace(" ", "  ");
        str = str.Replace("<", "&lt;");
        str = str.Replace(">", "&gt;");
        str = str.Replace('\n'.ToString(), "<br>");
        return str;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Request["id"] != null)
        {
            int id = Convert.ToInt32(Request["id"]);//转换为数字,防止sql注入            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
            conn.Open();
            adr = "select 附件上传地址 from Mail WHERE 邮件编号 = " + id;
            SqlCommand cmd = new SqlCommand(adr, conn);
            string path = cmd.ExecuteScalar().ToString();
            //取得路径
            filepath = FormatString(path.ToString()).ToString().Trim();            string Temp_filename = FormatString(path.ToString()).ToString();
            int pos = Temp_filename.LastIndexOf("\\") + 1;
            filename = Temp_filename.Substring(pos, Temp_filename.Length - pos).ToString();
            filename = HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(filename));            Response.Clear();
            Response.ClearHeaders();
            Response.ClearContent();
            FileStream fs = new FileStream(filepath, FileMode.Open);
            long FileSize = fs.Length;
            byte[] Buffer = new byte[(int)FileSize];
            fs.Read(Buffer, 0, (int)fs.Length);
            fs.Close();
            Response.ContentType = "application/octe-stream";
            Response.AddHeader("content-disposition", "attachment;filename=" + filename);
            Response.Charset = "UTF-8";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.BinaryWrite(Buffer);
            conn.Close();
        }
    }我这个只能下载如:A:/aaa  这样形式的单个附件,请问我要怎么改?
拜谢答者~~

解决方案 »

  1.   

    A:/aaa;B:/bbb;C:/ccc
    截成数组,做个循环
      

  2.   

    unlimitedsaga(等待过年放假) ( ) 信誉:100    Blog  2007-01-05 16:45:19  得分: 0  
     
     
       我路过,所以有分
      
     呵呵,近来被它难了好久,明天下班之前一定结贴
      

  3.   

    yan63(silence like a cancer grows) ( ) 信誉:100    Blog  2007-1-5 14:51:27  得分: 20  
     
     
       
    比如说:我一次上传了3个文件的时候在数据库中会生成3行纪录:
    A:/aaa;
    A:/aaa;B:/bbb;
    A:/aaa;B:/bbb;C:/ccc;
    而我想要的是每次上传在数据库只生成一行纪录,如:
    A:/aaa;B:/bbb;C:/ccc;
    ------------------------------------
    你在遍历到最后一个附件的时候插入数据库的记录是正确的,推测你在循环内部作了插入,实际上只需要构造出路径串(A:/aaa;B:/bbb;C:/ccc;)在循环外部插入即可,可以看看你的数据库操作的代码这是刚刚那个“多附件上传问题”你的回答,
    非常感谢你,现在这个下载犯难了,请再帮帮我 
     
      

  4.   

    定義一個字符串數組,然後把路徑存進數組,如:filepath=filepath.Substring(0,filepath.Length-1)//去掉最末尾的分號
    string[] strpaths = filepath.Split(';');//把分號之間的路徑取出來放到數組裡然後用一個循環輸出。
      

  5.   

    yangyupeng521(自家胖子) ( ) 信誉:99    Blog  2007-01-05 17:02:31  得分: 0  
     
     
       我虽然路过,但很想帮你,不过还是没看懂你要表达的意思。
      
     
    正如楼上所说:我想将要下载文件列出,然后由用户选择下载
      

  6.   

    string path="A:/aaa;B:/bbb;C:/ccc";
    string s=";"
    char[] p=s.ToCharArray();
    string b[]=path.Split(p);
    for(int i=0;i<b.length;i++)
    {
        插入语句 什么 insert into A values(b[i].Tostring());
    }
      

  7.   

    你可以参考多数邮件系统的做法,当你收到一封带有多个附件的邮件时
    系统将每个附件创建一个超链,用户点击后下载对应项,而不是只提供一个“下载全部”的按钮
    一股脑的将附件全部下载。一个html页,指定了contenttype后只提供单个文件的下载,如果要一次提供多个附件那就要开多个窗口,不建议这么做,如果需求一定要这样,那么可以把路径组合输出到页面,用javascript新开窗口,然后把路径逐个传给新窗口下载。
      

  8.   

    ydsunny(小强) ( ) 信誉:100    Blog  2007-01-05 17:01:28  得分: 0  
     
     
       定義一個字符串數組,然後把路徑存進數組,如:filepath=filepath.Substring(0,filepath.Length-1)//去掉最末尾的分號
    string[] strpaths = filepath.Split(';');//把分號之間的路徑取出來放到數組裡然後用一個循環輸出。
      
     
    -----
    顶这个
      

  9.   

    string aaa = "A:/aaa;B:/bbb;C:/ccc";
    截成数组,做个循环
    string [] strAddress = aaa.slipt(";");
      

  10.   

    string aaa = "A:/aaa;B:/bbb;C:/ccc";
    截成数组,做个循环
    string [] strAddress = aaa.slipt(";");
    -----------------
    同意!
    jf
      

  11.   

    protected void Button1_Click(object sender, EventArgs e)
        {
            if (Request["id"] != null)
            {
                int id = Convert.ToInt32(Request["id"]);//转换为数字,防止sql注入            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
                conn.Open();
                adr = "select 附件上传地址 from Mail WHERE 邮件编号 = " + id;
                SqlCommand cmd = new SqlCommand(adr, conn);
                string path = cmd.ExecuteScalar().ToString();
                //取得路径
                filepath = FormatString(path.ToString()).ToString().Trim();
                filepath = filepath.Substring(0, filepath.Length - 1);//去掉最末尾的分號
                string[] strpaths = filepath.Split(';');//把分號之間的路徑取出來放到數組裡            for (int i = 0; i < strpaths.Length; i++)
                {
                    string Temp_filename = FormatString(path.ToString()).ToString();
                    int pos = Temp_filename.LastIndexOf("\\") + 1;
                    filename = Temp_filename.Substring(pos, Temp_filename.Length - pos).ToString();
                    filename = HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(filename));                Response.Clear();
                    Response.ClearHeaders();
                    Response.ClearContent();
                    FileStream fs = new FileStream(filepath, FileMode.Open);
                    long FileSize = fs.Length;
                    byte[] Buffer = new byte[(int)FileSize];
                    fs.Read(Buffer, 0, (int)fs.Length);
                    fs.Close();
                    Response.ContentType = "application/octe-stream";
                    Response.AddHeader("content-disposition", "attachment;filename=" + filename);
                    Response.Charset = "UTF-8";
                    Response.ContentEncoding = System.Text.Encoding.UTF8;
                    Response.BinaryWrite(Buffer);
                    conn.Close();
                }
            }
        }
      

  12.   

    jf 同意 ydsunny(小强) 的做法
      

  13.   

    string aaa = "A:/aaa;B:/bbb;C:/ccc";
    string [] strAddress = aaa.slipt(";");
    foreach(string str in strAddress)
    {
      this.response.write("<a href="+str+">"+str+"</a>");
    }
      

  14.   

    向数据库存储的时候你就应该存相对地址,绝对地址当然是web不支持的啦
      

  15.   

    xinganna() ( ) 信誉:100    Blog  2007-01-06 15:00:53  得分: 0  
     
     
       我很想帮你,明白后就告诉你
      
     
    呵呵
      

  16.   

    .NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522.NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522.NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522.NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522.NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522
    .NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522.NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522.NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522.NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522.NET开发俱乐部给IT工作者提供交流平台,实现资源互补,共同进步!欢迎加入20152522