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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM