首页 新闻 会员 周边 捐助

.net 下载文件怎么重命名啊?

0
悬赏园豆:10 [待解决问题]

为了保证文件再上传时不会覆盖掉之前上传的文件,同时由于上传的目标目录里的文件可能很多,这个时候一个一个查是不太好的事情,所以这里可以自动生成GUID使文件名重命名成GUID_原来的名称.扩展名。但是在下载的时候最好可能保证恢复到原来的名称。这个怎么处理呢?

唐岗的主页 唐岗 | 初学一级 | 园豆:176
提问于:2014-04-16 10:12
< >
分享
所有回答(3)
0

这个通常是在数据库里面保存

OriginalFileName, FilePath这些。通过数据库的介入,你看到的文件夹结构与实际存储在服务器上的文件夹结构可能是不同的。

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-04-16 10:15

数据库存的路径最后的名字是用GUID生成的,但是我下载的时候我想保存为原来的名字。咋个处理?

支持(0) 反对(0) 唐岗 | 园豆:176 (初学一级) | 2014-04-16 10:19
0

调用方法

  string filePath = Server.MapPath(mailattachment.FilePath);              
                    System.IO.FileStream fs = new System.IO.FileStream(filePath + mailattachment.FileRealName, System.IO.FileMode.Open);
                    DownLoadFile(fs, Server.UrlEncode(mailattachment.FileName));

公共方法

public void DownLoadFile(FileStream fs, string fileName)
        {
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            Response.Charset = "UTF-8";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
            Response.BinaryWrite(bytes);
            Response.Flush();
            Response.End();
        }

happydaily | 园豆:260 (菜鸟二级) | 2014-04-16 10:19

这样弄出来它是先读了流才生成文件,如果文件很大,这样就很慢,导致客户点击了下载文档很久都没有反应。

支持(0) 反对(0) 唐岗 | 园豆:176 (初学一级) | 2014-04-16 10:27

@日子依旧: 哦?我也是网上找的,如果你有好的方法请告诉我,谢谢。

支持(0) 反对(0) happydaily | 园豆:260 (菜鸟二级) | 2014-04-16 11:03

把Response.BinaryWrite(bytes);改为Response.WriteFile(file.FullName);

不过要更改公共方法,直接使用文件名

试了之后说一下效果

支持(0) 反对(0) 诶碧司 | 园豆:1912 (小虾三级) | 2014-04-16 17:13

@日子依旧: 转战MVC了,一句话搞定  return File(filePath, "text/plain",Server.UrlEncode(mailattachment.FileName));

支持(0) 反对(0) happydaily | 园豆:260 (菜鸟二级) | 2014-04-17 16:44
0

<a href='<%=path%>'>文件名</a>  path=path.split('_')[1];

wolfy | 园豆:2636 (老鸟四级) | 2014-04-16 12:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册