这个通常是在数据库里面保存
OriginalFileName, FilePath这些。通过数据库的介入,你看到的文件夹结构与实际存储在服务器上的文件夹结构可能是不同的。
数据库存的路径最后的名字是用GUID生成的,但是我下载的时候我想保存为原来的名字。咋个处理?
调用方法
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();
}
这样弄出来它是先读了流才生成文件,如果文件很大,这样就很慢,导致客户点击了下载文档很久都没有反应。
@日子依旧: 哦?我也是网上找的,如果你有好的方法请告诉我,谢谢。
把Response.BinaryWrite(bytes);改为Response.WriteFile(file.FullName);
不过要更改公共方法,直接使用文件名
试了之后说一下效果
@日子依旧: 转战MVC了,一句话搞定 return File(filePath, "text/plain",Server.UrlEncode(mailattachment.FileName));
<a href='<%=path%>'>文件名</a> path=path.split('_')[1];