日期:2014-05-18  浏览次数:20861 次

菜鸟提问(web):急~~~~~~~~~用.net实现下载并保存到客户端,生成文本文件
各位专家好,我现在想用.net(c#)实现如下功能,跪求做法:
我现在要实现名片下载,当用户点击下载时,用户可以自己选择保存客户端的路径,并以txt格式下载到本地,怎么实现啊!!
我的想法是用system.io中的file可以生成客户端文件,可是不知道怎么获取用户选择地址,拜托各位帮帮我这个菜鸟吧

------解决方案--------------------
是winform??如果是使用SaveFileDialog类来选择客户端路径,通过这个类的实例的FileName属性来获取选择的文件名路径,然后使用System.IO来写得到的这个文件


是webform的话需要一些设置

C# code
string filename = Server.MapPath("uploadfiles/" + FileName);
        Response.Clear();
        Response.ContentType = Mime;
        Response.AddHeader("Content-Disposition", "attachment;filename=\""+FileName+"\"");
        Response.Flush();
        Response.WriteFile(filename);

------解决方案--------------------
http://www.cnblogs.com/liping13599168/archive/2007/03/12/672025.html
------解决方案--------------------
webform的话只能由客户保存服务器端输出的文件,而不能操作客户端的文件.当然也可以使用js来完成,不过这个不太现实
一般js是无法读写客户端文件的.

下面给个简单的例子给你,不需要生成文件的...

C# code
string cardStr="张三\n李四\n王五";
//string filename = Server.MapPath("uploadfiles/" + FileName);//这个文件由你服务器端使用IO生成
//当然也可以不需要生成文件,直接输出字符串也可以,主要看你设置的MIME了
Response.ContentType ="text/plain";//文本类型的mime
Response.AddHeader("Content-Disposition", "attachment;filename=\"card.txt\"");//指定默认名称
//Response.WriteFile(filename);//把文件输出到客户端,这个会弹出保存对话框
Response.Write(cardStr);//由于设置了头,也会弹出保存对话框

------解决方案--------------------
1、文件放在外网服务器;
2、先将原文件下载;
3、将下载的文件转换为文本格式;
------解决方案--------------------
private bool DownFile(string fileName, string fullPath)
{
try
{
Response.ContentType = application / octet - stream;
Response.AppendHeader("Content-Disposition", "attachment;filename=" +
HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());

System.IO.FileStream fs = System.IO.File.OpenRead(fullPath);
long fLen = fs.Length;
int size = 102400;//每100K同时下载数据 
byte[] readData = new byte[size];//指定缓冲区的大小 
if (size > fLen) size = Convert.ToInt32(fLen);
long fPos = 0;
bool isEnd = false;
while (!isEnd)
{
if ((fPos + size) > fLen)
{
size = Convert.ToInt32(fLen - fPos);
readData = new byte[size];
isEnd = true;
}
fs.Read(readData, 0, size);//读入一个压缩块 
Response.BinaryWrite(readData);
fPos += size;
}
fs.Close();
System.IO.File.Delete(fullPath);
return true;
}
catch
{
return false;
}
}

下载之后再改.或者下载的时间.保存为 .txt