HttpWebRequest下载文件,乱码问题解决方案

写在前面

今天之所以会总结HttpWebRequest下载文件,主要是因为在使用该类下载文件的时候,有些地方需要注意一下,在实际的项目中遇到过这种问题,觉得还是有必要总结一下的。在下载文件时,最常见的就是下载的文件出现乱码。

一个例子

还是以前面介绍的restful接口为例吧,现在我要通过HttpWebRequest请求,来下载图片,可以这样来。

api地址为:http://localhost:21074/ImageService/api/1.jpg

关于restful imageservice的详细内容,请参考前面的内容,这里只贴出关键代码:

        /// <summary>
        /// 根据图片名称取文件流
        /// </summary>
        /// <param name="imgUrl"></param>
        /// <returns></returns>
        public System.IO.Stream GetImageStream(string imgUrl)
        {
            var contentType = Path.GetExtension(imgUrl).Trim('.');
            WebOperationContext woc = WebOperationContext.Current;
            //根据请求的图片类型,动态设置contenttype
            woc.OutgoingResponse.ContentType = "image/" + contentType;
            string savePath = System.Web.HttpContext.Current.Server.MapPath("/Images");
            string filePath = Path.Combine(savePath, imgUrl);
            return File.OpenRead(filePath);
        }

客户端请求代码

            Uri url = new Uri("http://localhost:21074/ImageService/api/1.jpg");
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            using (Stream stream = request.GetResponse().GetResponseStream())
            {
                //文件流,流信息读到文件流中,读完关闭
                using (FileStream fs = File.Create(@"download.jpg"))
                {
                    //建立字节组,并设置它的大小是多少字节
                    int length = 1024;//缓冲,1kb,如果设置的过大,而要下载的文件大小小于这个值,就会出现乱码。
                    byte[] bytes = new byte[length];
                    int n = 1;
                    while (n > 0)
                    {
                        //一次从流中读多少字节,并把值赋给N,当读完后,N为0,并退出循环
                        n = stream.Read(bytes, 0, length);
                        fs.Write(bytes, 0, n); //将指定字节的流信息写入文件流中
                    }
                }
            }

注意,这里在读取的时候,设置的缓冲1kb,虽然随度慢点,但保证数据的正确性,比如如果设置10kb,而文件大小小于这个数,在stream.Read的时候,就会读取过多的字节,造成乱码,如果在下载之前,能够获取到文件的大小信息,可动态的设置这个缓冲区的大小。

总结

这里主要总结,在项目中遇到一个问题。希望对你有所帮助。

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/4590258.html
时间: 2024-11-02 19:47:58

HttpWebRequest下载文件,乱码问题解决方案的相关文章

下载文件乱码问题求助!!

问题描述 下载文件乱码问题求助!! if(null!=page){ try { getResponse().reset();// 清空输出流 SimpleDateFormat df = new SimpleDateFormat(""yyyy-MM-dd HH:mm:ss"");//""yyyy年MM月dd日HH时mm分ss秒"" String formatFileName =URLEncoder.encode("&q

IE11浏览器下载文件乱码怎么办?乱码解决办法

1.我们先回到电脑桌面,同时按下Win + R,然后在输入运行框输入"gpedit.msc" 进入电脑的"组策略编辑器"  2.然后我们在组策略编辑器中找到"计算机配置→管理模板→windows组件→Internet Explorer→自定义用户代理字符串:" 3.双击打开,左上角选中已启动,下方输入字符串"MSIE 9.0"    4.然后没有问题之后我们再点击"确认"按钮: 5.之后我们把ie11浏览器

FF浏览器和IE下载文件乱码问题的解决方法_java

下载在FF浏览器下出现了下列问题  但是在其他浏览器(IE,Chrome....)上没有出现这个问题, 需要写一个Utitl类管理下 复制代码 代码如下: package com.sencloud.dh.core.utils; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; /** * 对文件流输出下载的中文

C#下载文件httpWebRequest

问题描述 C#下载文件httpWebRequest 我用C#开发一个下载功能用HttpWebRequest类来访问下载,但是发现最大的下载速度是128kbs这是什么情况,我的带宽很高 解决方案 你试试看webclient.downloadfile 解决方案二: Unity3d C# HttpWebRequest 异步下载文件HttpWebRequest下载文件带进度条 解决方案三: 用WebRequest编写的简单下载器就是这样慢,并且不稳定容易报连接错误.

彻底解决中文名文件下载和下载文件内容乱码问题

解决|问题|下载|中文 之前,写过一个Download.jsp文件,可以解决下载文件乱码问题(诸如:DOC,XSL文件等等).后来发现,遇到中文名的文件的时候,文件下载将会报错~~~~今天,通过改写原Download.jsp文件已经彻底解决了这个问题~现在,把一整套的文件上传下载的方法给贴出来~~~以便大家借鉴!~!~!~!~!  作者:古埃及法老---------------------------------------------------------------------------

jsp:怎么实现点击下载按钮直接下载文件而不是在浏览器中直接打开

问题描述 jsp:怎么实现点击下载按钮直接下载文件而不是在浏览器中直接打开 点击按钮下载的时候会有一个弹出框,可以选择是打开还是下载,请大神们给出一个代码实例 解决方案 轻松下载.pdf文件(直接下载,而不是在IE浏览器里面打开)直接让浏览器下载文件而不打开直接让浏览器下载文件而不打开 解决方案二: http://blog.csdn.net/arui_email/article/details/9041283 解决方案三: //强制要求为下载,防止有些浏览器调用默认打开程序打开而不下载 resp

JSP SmartUpload上传文件乱码解决纪实+UploadBean上传解决方案

js|解决|上传 作者:fbysss声明:本文为fbysss原创,如需引用,请注明作者及引用地址关键字:smartupload,uploadbean,linux,中文乱码一.SmartUpload上传文件乱码解决纪实 恶心指数:五星 完成程度:80%(文件名问题未解决) 问题描述:在windows下开发的web应用,用到了smartupload上传文件,需求很简单,就是一个表单文件formdata.jsp,一个获取表单并上传的文件getdata.jsp,调试的时候,windows和linux系统

java struts-struts2的xml配置下载文件时文件名乱码

问题描述 struts2的xml配置下载文件时文件名乱码 这里写上中文名乱码了,我可以咋解决呢?谢谢大家的指点! 解决方案 http://blog.csdn.net/csh624366188/article/details/6695702 解决方案二: 非常谢谢你给的链接,我这个问题都一天多了,我刚才看了那个链接,然后试着弄到我的项目中,完美的解决了问题,非常感谢! 解决方案三: 附上我的解决方法: public class DownFileAction { private String fil

php中强制下载文件的代码(解决了IE下中文文件名乱码问题)_php技巧

中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下. 复制代码 代码如下: <?php $file_name = urlencode($_REQUEST['filename']); header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, po