用c#怎样从服务器下载文件,并保存为相应的类型
C#从服务器下载文件可以使用下面4个方法:TransmitFile、WriteFile、WriteFile和流方式下载文件,并保存为相应类型,方法如下:
1、TransmitFile实现下载
protected void Button1_Click(object sender, EventArgs e){
/
微软为Response对象提供了一个新的方法TransmitFile来解决使用ResponseBinaryWrite
下载超过400mb的文件时导致Aspnet_wpexe进程回收而无法成功下载的问题。
代码如下:
/
ResponseContentType = "application/x-zip-compressed";
ResponseAddHeader("Content-Disposition", "attachment;filename=zzip");
string filename = ServerMapPath("DownLoad/zzip");
ResponseTransmitFile(filename);
}
2、WriteFile实现下载
protected void Button2_Click(object sender, EventArgs e){
/
using SystemIO;
/
string fileName = "asdtxt";//客户端保存的文件名
string filePath = ServerMapPath("DownLoad/aaatxt");//路径
FileInfo fileInfo = new FileInfo(filePath);
ResponseClear();
ResponseClearContent();
ResponseClearHeaders();
ResponseAddHeader("Content-Disposition", "attachment;filename=" + fileName);
ResponseAddHeader("Content-Length", fileInfoLengthToString());
ResponseAddHeader("Content-Transfer-Encoding", "binary");
ResponseContentType = "application/octet-stream";
ResponseContentEncoding = SystemTextEncodingGetEncoding("gb2312");
ResponseWriteFile(fileInfoFullName);
ResponseFlush();
ResponseEnd();
}
3、WriteFile分块下载
protected void Button3_Click(object sender, EventArgs e){
string fileName = "aaatxt";//客户端保存的文件名
string filePath = ServerMapPath("DownLoad/aaatxt");//路径
SystemIOFileInfo fileInfo = new SystemIOFileInfo(filePath);
if (fileInfoExists == true)
{
const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize];
ResponseClear();
SystemIOFileStream iStream = SystemIOFileOpenRead(filePath);
long dataLengthToRead = iStreamLength;//获取下载的文件总大小
ResponseContentType = "application/octet-stream";
ResponseAddHeader("Content-Disposition", "attachment; filename=" + HttpUtilityUrlEncode(fileName));
while (dataLengthToRead > 0 && ResponseIsClientConnected)
{
int lengthRead = iStreamRead(buffer, 0, ConvertToInt32(ChunkSize));//读取的大小
ResponseOutputStreamWrite(buffer, 0, lengthRead);
ResponseFlush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
ResponseClose();
}
}
4、流方式下载
protected void Button4_Click(object sender, EventArgs e){
string fileName = "aaatxt";//客户端保存的文件名
string filePath = ServerMapPath("DownLoad/aaatxt");//路径
//以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileModeOpen);
byte[] bytes = new byte[(int)fsLength];
fsRead(bytes, 0, bytesLength);
fsClose();
ResponseContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
ResponseAddHeader("Content-Disposition", "attachment; filename=" + HttpUtilityUrlEncode(fileName, SystemTextEncodingUTF8));
ResponseBinaryWrite(bytes);
ResponseFlush();
ResponseEnd();
}
其实我建议使用一个专门的ftp客户端来使用ftp比较好,这样你只需要在客户端上输入ftp服务器的IP和端口,账号,密码,就能轻松的上传和下载文件,非常实用。
这里我推荐使用IIS7服务器管理工具,它可以作为FTP的客户端,想要进行FTP的上传下载操作,只需要下载安装iis7服务器管理工具就可以了!免费下载,很方便。
同时它还可以作为VNC的客户端,进行VNC的相应操作!它能够连接Windows和Linux系统下的服务器和VPS,能满足你不同系统的使用,感觉不错的话可以试试
看你是什么服务器了~~
ftp服务器的话需要输入
ftp://xxxxxxxxxxxxxip地址,如果需要用户名密码的话输入就可以了~~
打开后,想下载哪个就下载哪个,可以直接拖动到你的计算机上的任何一个磁盘里,也可以借助一些FTP下载工具进行下载。如果是网页页面形式的话,在要下载的文件处单击鼠标右键,目标另存为即可
/
根据文件输入流,和文件名称下载文件
@param resp HttpServletResponse
@param file 供下载的文件
@param file_name 所显示的下载文件名称
/
public void FileDownLoad(HttpServletResponse resp ,File file, String file_name) {
try {
String fileName = new String(file_namegetBytes("GBK"), "ISO8859_1");
respsetContentType("application;charset=utf-8"); // 指定文件的保存类型。
respsetHeader("Content-disposition", "attachment; filename="+ fileName);
ServletOutputStream oupstream = respgetOutputStream();
FileInputStream from = new FileInputStream(file);
byte[] buffer = new byte[catchSize];
int bytes_read;
while ((bytes_read = fromread(buffer)) != -1) {
oupstreamwrite(buffer, 0, bytes_read);
}
oupstreamflush();
} catch (Exception e) {
}
}
这个是服务器端文件下载工具类 题主可以试试,望采纳
常用的三种方法!
1:在服务器上建立一个WEB网站,然后把要下载的文件压缩一下打包,再然后放到建好的WEB网站的根目录,然后网址再加一个打包的文件名就可以在本地下载了。这就是所说的在服务器上做一个下载点
2:在服务器上安装FTP的服务端,然后在本地的FTP客户端里下载文件
3:在服务器里进邮箱把文件传到邮箱里,然后在本地打开邮箱进去下载文件
0条评论