VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1430|回复: 13

多附件上传形式,下载的时候怎么办?

[复制链接]

2

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-3-16 11:30:01 | 显示全部楼层 |阅读模式
我数据库字段 "多附件上传地址" 中形式如下:
A:/aaa;B:/bbb;C:/ccc;
下载的时候怎么办?

public string FormatString(string str)
    {
        str = str.Replace(" ", "  ");
        str = str.Replace("<", "<");
        str = str.Replace(">", ">");
        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  这样形式的单个附件,请问我要怎么改?
拜谢答者~~
回复

使用道具 举报

0

主题

23

帖子

21.00

积分

新手上路

Rank: 1

积分
21.00
发表于 2020-6-16 11:45:01 | 显示全部楼层
A:/aaa;B:/bbb;C:/ccc
截成数组,做个循环
回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-6-17 00:15:01 | 显示全部楼层
可以将要下载文件列出,然后由用户选择下载,或者每个附件开一个窗口进行下载,不过这样好像用户体验不好的
回复

使用道具 举报

2

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
 楼主| 发表于 2020-6-17 21:00:01 | 显示全部楼层
crabhero  


   
比如说:我一次上传了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;)在循环外部插入即可,可以看看你的数据库操作的代码

这是刚刚那个“多附件上传问题”你的回答,
非常感谢你,现在这个下载犯难了,请再帮帮我

回复

使用道具 举报

0

主题

17

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
发表于 2020-6-18 09:45:01 | 显示全部楼层
定義一個字符串數組,然後把路徑存進數組,如:

filepath=filepath.Substring(0,filepath.Length-1)//去掉最末尾的分號
string[] strpaths = filepath.Split(';');//把分號之間的路徑取出來放到數組裡

然後用一個循環輸出。
回复

使用道具 举报

0

主题

11

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-6-18 22:30:01 | 显示全部楼层
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());
}
回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

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

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-6-19 13:45:01 | 显示全部楼层
把文件列出来让用户去选择吧,点一个连接就全都下载下来不太好吧!
要不就全部打包,之后下载下一个压缩包吧!呵呵!
回复

使用道具 举报

0

主题

8

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-6-25 21:45:01 | 显示全部楼层
string aaa = "A:/aaa;B:/bbb;C:/ccc";
截成数组,做个循环
string [] strAddress = aaa.slipt(";");
回复

使用道具 举报

0

主题

9

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-25 23:30:01 | 显示全部楼层
严重同意楼上的方法,要求下截的数组的长度,就可以做个循环了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表