CSDN首页 | 新闻 | 论坛 | 小组 | Blog | 文档 | 下载 | 读书 | Tag | 网摘 | 搜索 | .NET | Java | 游戏 | 视频 | 人才 | 外包 | 第二书店 | 程序员 |
如何把stream文件流转化为文件?
按照httpWebRequest和httpWebResponse来获得服务器上的文件,该如何把stream文件流转换成文件呢?例如是dll文件的话?! 问题点数:50、回复次数:13Top
1 楼charlay(磊)回复于 2005-10-24 14:46:42 得分 0
急等!Top
2 楼xiaomatian(趴趴熊◎%#……※×)回复于 2005-10-24 15:08:36 得分 40
这个问题很简单的啊.有一个方法叫SaveStreamToFile,就是把流保存成指定的文件的.
具体说明如下:
public static void SaveStreamToFile(
Stream inputStream,
string path
);
Top
3 楼charlay(磊)回复于 2005-10-24 16:40:09 得分 0
private void Form1_Load(object sender, System.EventArgs e)
{
WebRequest request = null;
WebResponse response = null;
request = WebRequest.Create("http://community.csdn.net/images/CSDN_logo.GIF");
response =request.GetResponse();
Stream stream = response.GetResponseStream();
MetaData.SaveStreamToFile(stream,@"e://CSDN_logo.GIF");
}
我试着从csdn服务器端下载一个logo.gif文件保存到e盘根目录,结果是文件有了,和原始文件大小也一样,可是内容不对,图片不能正常打开!望高手解答!Top
4 楼charlay(磊)回复于 2005-10-24 17:14:50 得分 0
急等!Top
5 楼xiaomatian(趴趴熊◎%#……※×)回复于 2005-10-24 17:18:51 得分 0
其实你想做下载的话你还是用webclient类来做吧,用webclient类的downloadfile方法来获取.
string remoteUri = "http://community.csdn.net/images/";
string fileName = "CSDN_logo.GIF",
string myStringWebResource = null;
WebClient myWebClient = new WebClient();
myStringWebResource = remoteUri + fileName;
myWebClient.DownloadFile(myStringWebResource,fileName);
这样就把你的那个文件保存到了你的exe文件夹下了.Top
6 楼charlay(磊)回复于 2005-10-24 17:23:08 得分 0
谢谢,其实我开始也用过这个的,但是由于中间设计到一个代理服务器的问题,所以只能转用WebRequest和WebResponse了。Top
7 楼xiaomatian(趴趴熊◎%#……※×)回复于 2005-10-24 17:26:14 得分 0
以上代码刚刚在控制台程序下测试通过.
Top
8 楼charlay(磊)回复于 2005-10-24 17:34:43 得分 0
这个小软件要求可以通过代理服务器访问Internet,所以没有使用WebClient。
xiaomatian你指我的代码可以正确执行?文件下载下来也能正常打开?Top
9 楼navy_koo(平湖秋水)回复于 2005-10-24 17:43:00 得分 5
request = WebRequest.Create("http://community.csdn.net/images/CSDN_logo.GIF");
response =request.GetResponse();
Stream stream = response.GetResponseStream();
这种方法是不行的。
原因是: 默认情况下Response输出的是Html响应流,也就是说其中包括了一些html元素;
所以这个问题关系到服务端怎么响应Response或者说怎么写Response,Response也是有类型的即ContentType。客户端只能接受。
所以,一般往客户端写文件会用
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(file.FullName);
输出图片也有很详细的ContentType
Response.ContentType = "image/JPEG";
Response.ContentType = "image/BMP";
。。。
Top
10 楼xiaomatian(趴趴熊◎%#……※×)回复于 2005-10-24 18:05:46 得分 0
呵呵.根据你的要求刚刚在控制台下写了一个webrequest的下载文件的.
调试通过.
Console.WriteLine("Hello World!");
WebRequest wreq=WebRequest.Create("http://community.csdn.net/images/CSDN_logo.GIF");
WebResponse wresp=wreq.GetResponse();
Stream respStream=wresp.GetResponseStream();
int length=(int)wresp.ContentLength;
BinaryReader br=new BinaryReader(respStream);
FileStream fs;
fs = File.Create("M://csdn.gif");
fs.Write(br.ReadBytes(length), 0, length);
br.Close();
fs.Close();
Console.WriteLine("DownLoad Success!!");Top
11 楼xiaomatian(趴趴熊◎%#……※×)回复于 2005-10-24 18:06:44 得分 0
以上代码下载的那个gif图片可以打开.Top
12 楼xiaomatian(趴趴熊◎%#……※×)回复于 2005-10-24 18:30:26 得分 0
不是说的代码可以运行,我是我写用webclient写的那个可以运行.上面那个是用你要求的来写的,已经测试通过,可以打开,你再修改一下就可以了!Top
13 楼holym(小雨)回复于 2005-10-24 19:40:48 得分 5
public void download(string file)
{
string file = Server.MapPath(file);
if (file == null)
{
Response.Write("参数错误!");
return;
}
if (File.Exists(file))
{
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;FileName="+Server.UrlEncode(Path.GetFileName(file)));
Response.WriteFile(file);
Response.End();
}
else
{
Response.Write("文件不存在!");
}
}Top