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

简介: 1.Stream 转换为 MemoryStream(Stream不支持查找) MemoryStream StreamToMemoryStream(Stream instream) { MemoryStream outstream = new Mem...

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

 

目录
相关文章
|
3月前
|
消息中间件 存储 Serverless
函数计算产品使用问题之怎么访问网络附加存储(NAS)存储模型文件
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之网络缓冲池(NetworkBufferPool)中可用内存不足,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
11天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
181 1
|
2月前
|
存储 弹性计算 测试技术
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
阿里云服务器ECS实例可以分为多种实例规格族。根据CPU、内存等配置,一种实例规格族又分为多种实例规格。而实例规格又包含vCPU、处理器、内存、vTPM、本地存储、网络带宽、网络收发包PPS、连接数、弹性网卡、云盘带宽、云盘IOPS等指标,本文为大家详细介绍实例规格的这些指标,以供大家了解和选择。
131 14
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
111 5
|
1月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
44 0
|
1月前
|
程序员 Windows
程序员必备文件搜索工具 Everything 带安装包!!! 比windows自带的文件搜索快几百倍!!! 超级好用的文件搜索工具,仅几兆,不占内存,打开即用
文章推荐了程序员必备的文件搜索工具Everything,并提供了安装包下载链接,强调其比Windows自带搜索快且占用内存少。
38 0
|
3月前
|
Java
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
|
2月前
|
存储 安全 Linux
将文件映射到内存,像数组一样访问
将文件映射到内存,像数组一样访问
29 0
|
3月前
|
存储 网络架构
网络速率与下载速率
【8月更文挑战第8天】
181 1
网络速率与下载速率
下一篇
无影云桌面