zoukankan      html  css  js  c++  java
  • 下载网络文件,网络流转换为内存流

    string fileext = CSA_BLL.Common.Utils.GetFileExt(filePath);
    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.Request.UserAgent.ToUpper().Contains("MSIE") ||
    HttpContext.Request.UserAgent.ToUpper().Contains("TRIDENT") ||
    HttpContext.Request.UserAgent.ToUpper().Contains("EDGE"))
    {
    fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
    }
    else
    {
    fileName = fileName.Replace(" ", "_");
    }
    //fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
    Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fileName + "." + fileext));
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();

    }
    }
    return new EmptyResult();
    }

    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;
    }

  • 相关阅读:
    重读SQLServer技术内幕 -- 故障检测概要
    Android Studio调试React Native项目
    Android 异常处理
    第一天
    记一次"未将对象引用设置到对象的实例"问题的排查过程
    Hyper-V连接虚拟机异常,“无法进行连接,因为可能无法将凭据发送到远程计算机”
    关于TFS2012无法发送警报邮件的问题
    BaseAdapter日常的封装
    android自定义拍照
    Android系统拍照源码
  • 原文地址:https://www.cnblogs.com/roper/p/11804190.html
Copyright © 2011-2022 走看看