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

 

目录
相关文章
|
30天前
|
消息中间件 存储 Serverless
函数计算产品使用问题之怎么访问网络附加存储(NAS)存储模型文件
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之网络缓冲池(NetworkBufferPool)中可用内存不足,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
10天前
|
存储 弹性计算 测试技术
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
阿里云服务器ECS实例可以分为多种实例规格族。根据CPU、内存等配置,一种实例规格族又分为多种实例规格。而实例规格又包含vCPU、处理器、内存、vTPM、本地存储、网络带宽、网络收发包PPS、连接数、弹性网卡、云盘带宽、云盘IOPS等指标,本文为大家详细介绍实例规格的这些指标,以供大家了解和选择。
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
|
3月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
65 0
|
1月前
|
Java
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
|
1月前
|
存储 网络架构
网络速率与下载速率
【8月更文挑战第8天】
77 1
网络速率与下载速率
|
1月前
|
存储 Ubuntu Linux
NFS服务部署全攻略:从零到一,轻松驾驭网络文件系统,让你的文件共享像飞一样畅快无阻!
【8月更文挑战第5天】NFS(网络文件系统)能让网络中的电脑无缝共享文件与目录。基于客户端-服务器模式,用户可像访问本地文件般透明操作远程文件。部署前需准备至少两台Linux机器:一台服务器,其余作客户端;确保已装NFS相关软件包且网络通畅。服务器端安装NFS服务与rpcbind,客户端安装nfs-utils。
61 4
|
2月前
|
Java
jmap 查看jvm内存大小并进行dump文件内存分析
jmap 查看jvm内存大小并进行dump文件内存分析
52 3
|
2月前
|
机器学习/深度学习 边缘计算 量子技术
ICML 2024:信号表征指数级强、内存节省超35%,量子隐式表征网络来了
【7月更文挑战第6天】QIREN,量子隐式表征网络,借助量子计算增强信号处理能力,内存效率提升35%以上。该技术旨在改进高频信号建模,提升图像和音频处理任务的性能,同时在资源受限环境下减少内存需求。尽管面临量子技术成熟度和训练复杂性的挑战,QIREN为机器学习开辟了新途径。[论文链接: https://arxiv.org/abs/2406.03873]**
41 3
|
3月前
|
存储 编解码 API
视觉智能开放平台产品使用合集之如何处理本地文件或网络文件链接
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。