• 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
    收藏
    关注
    评论
  • 相关阅读:
    Unity-国际版下载
    Js数值处理
    Vue,部署通过Url指向dist里的index, 通过IIS 7.0及以上部署,添加 注册托管代码模块
    反编译
    Node 命令
    VUE开发命令
    VS2017发布到部署网站
    谷歌浏览器提示您的连接不是私密连接
    iis,配置
    VS开发android
  • 原文地址:https://www.cnblogs.com/yidengbone/p/7463301.html
Copyright © 2020-2023  润新知