HttpWebRequest(跨域下载文件——网络流转换为内存流下载)

1.Stream 转换为 MemoryStream(Stream不支持查找)

MemoryStream StreamToMemoryStream(Stream instream)
        {
            MemoryStream outstream = new MemoryStream();
            const int bufferLen = 4096;
            byte[] buffer = new byte[bufferLen];
            int count = 0;
            while ((count = instream.Read(buffer, 0, bufferLen)) > 0)
            {
                outstream.Write(buffer, 0, count);
            }
            return outstream;
        }

View Code

2.网络流转化为内存流并下载

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(filePath);
                        request.Method = "GET";
                        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                        {
                            if (response.StatusCode == HttpStatusCode.OK)
                            {
                                Stream rs = response.GetResponseStream();
//网络流转换为内存流
                                var ms = StreamToMemoryStream(rs);
                                ms.Seek(0, SeekOrigin.Begin); int buffsize = (int)ms.Length; //rs.Length 此流不支持查找,先转为MemoryStream
                                byte[] bytes = new byte[buffsize];

                                ms.Read(bytes, 0, buffsize);
                                ms.Flush(); ms.Close();
                                rs.Flush(); rs.Close();
//以文件流的方式下载
                                Response.Charset = "utf-8";
                                Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
                                Response.ContentType = "application/octet-stream";
                                if (HttpContext.Current.Request.UserAgent.ToUpper().Contains("MSIE") ||
                                    HttpContext.Current.Request.UserAgent.ToUpper().Contains("TRIDENT") ||
                                    HttpContext.Current.Request.UserAgent.ToUpper().Contains("EDGE"))
                                {
                                    name = HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8);
                                }
                                else
                                {
                                    name = name.Replace(" ", "_");
                                }
                                //fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
                                Response.AddHeader("Content-Disposition", "attachment;   filename=" + name);
                                Response.BinaryWrite(bytes);
                                Response.Flush();
                                Response.End();
                            }
                        }

View Code

3.网络路径

private string GetContractPathRules(string id, string name) {
            string url = ConfigurationManager.AppSettings["ContractUrl"];
            url = url.TrimEnd('/') + "/";
            return Path.Combine(url, Path.Combine(id + "/", name));
        }
//例如:http://x.x.x.x:8088/xxx/xxx.pdf

View Code

 

时间: 2024-10-26 11:54:27

HttpWebRequest(跨域下载文件——网络流转换为内存流下载)的相关文章

ndroid-我github上下载的xutils,用来下载文件,可是一直显示下载失败

问题描述 我github上下载的xutils,用来下载文件,可是一直显示下载失败 public void click(View v){ Thread t = new Thread(){ @Override public void run() { String path = "http://10.0.2.2:8080/mobilesafe_2.0.apk"; String target = Environment.getExternalStorageDirectory()+ "

跨域-xmlrequest文件上传 进度

问题描述 xmlrequest文件上传 进度 XMLrequest 跨域文件上传 上传可以跨域 进度不能跨域 大神们 求指点办法 解决方案 android 文件上传 进度框 解决方案二: onprogress 无效?能传获取进度应该不是问题才对XMLHttpRequest Level 2新特性介绍 xhr.upload.onprogress = updateProgress; function updateProgress(event) { if (event.lengthComputable)

基于jquery的跨域调用文件_jquery

官方的文档特别说明,该函数只适用于1.2以后的版本,之前的版本是不行滴. 复制代码 代码如下: function GetCrossDomainContent() { $.getScript("http://two.xthost.info/im0417/cnblogs.txt", function() { if (typeof (msg) != "undefined") { $("#TestCrossDomain").val(msg[0]); }

php下载文件源代码(强制任意文件格式下载)_php技巧

一个简单的php文件下载源代码,虽不支持断点续传等,但是可以满足一些常用的需求了.php下载文件其实用一个a标签就能实现,比如 <a href="web/magento-1.8.1.0.zip">magento-1.8.1.0.zip</a> .但是遇到一些浏览器能识别的格式,比如.txt,.html,.pdf等,再用<a href="web/abc.txt">abc.txt</a> 想必也知道会发生什么了. 复制代码

win10怎么在睡眠模式下下载文件 win10睡眠模式下下载文件的方法

一些win0的用户会在晚上开着电脑下载文件,可是早上醒来发现电脑进入睡眠模式且下载的文件也没下载完成. 那么,我们该怎么让win10系统在睡眠模式下继续下载东西呢?下面小编就为大家带来win10睡眠模式下下载文件的方法.一起去看看吧! 步骤如下: 1.按下"Win+R"组合键打开运行,输入:regedit 点击确定打开注册表编辑器: 10.完成设置后,点击开始菜单-电源-睡眠 在睡眠状态下也可以联网下载了. 以上就是小编为大家带来的关于Win10设置睡眠模式联网下载的方法就为大家介绍到

ftp自动下载文件脚本分享(ftp命令下载文件)_DOS/BAT

复制代码 代码如下: cd /home/oracle/ftpdatashort_ymd=$(date +%y%m%d)file="10628110.20""$short_ymd"".zip"ftp -niv<<!open 221.236.6.241user XXXX XXXXmget $filebye!

快速可扩展的Ajax流代理——提供持续下载跨域数据

简介 由于浏览器禁止跨域的XMLHTTP调用,所有的Ajax网站都必须有一个服务端代理来从外部域比如Flickr或者Digg来抓去内容.对客户端Javascript代码来说,一个XMLHttp的调用将请求传递给宿主在相同域里的服务端代理,然后由代理来从外部服务器上下载内容,并回传给客户端.通常,所有从外部服务器获取内容的Ajax站点都采用这种代理方案,除了一些罕见的使用JSONP的人.当网站上的许多组件正在从外部域下载内容时,这样的代理将会被大量地调用.所以,当代理开始被百万次地调用时,它将变成

请教大神,uploadify跨域问题,crossdomain.xml文件如何被调用?

问题描述 请教大神,uploadify跨域问题,crossdomain.xml文件如何被调用? 最近需要用到uploadify的跨域处理机制,网上查了资料,说是在tomcat的weapps/Root 里增加跨域策略文件文件 crossdomain.xml即可.网上查的文件如下: <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/d

C# 跨服务器下载文件

问题描述 我用asp.netC#做了一个查询数据库的软件,一些文件是放在另外一个服务器上的.现在我想在软件中实现跨服务器下载文件,一次只下载一个文件,不大.请问该怎么做呢? 解决方案 解决方案二:你可以把文件夹共享读取或者在那台服务器上安装iis,将那些文件放在iis下面解决方案三:http下载,把文件放IIS下ftp下载,建个ftp