zoukankan      html  css  js  c++  java
  • 解决得到网络流不支持查找的方案

    解决思路:

    1. 将获取的网络流转化成内存流
    2. 内存流位置指向0     
    3. 内存流转化成字节流
    //获取fileNamePath路径的网络流
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileNamePath);
    WebResponse response = request.GetResponse();
    Stream stream = response.GetResponseStream();
    
    //将网络流写入内存流
    MemoryStream memoryStream = new MemoryStream();
    const int bufferLength = 1024;
    int actual;
    byte[] buffer = new byte[bufferLength];
    while ((actual = stream.Read(buffer, 0, bufferLength)) > 0)
    {
        memoryStream.Write(buffer, 0, actual);
    }
    memoryStream.Position = 0;
    
    //将内存流转成字节流
    byte[] bytes = new byte[memoryStream.Length];
    memoryStream.Read(bytes,0,bytes.Length);
    memoryStream.Seek(0,SeekOrigin.Begin);

    项目中进行代码的封装

            /// <summary>
            /// 返回字节流
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="url"></param>
            /// <param name="options"></param>
            /// <param name="param"></param>
            /// <param name="encoding"></param>
            /// <returns></returns>
            public static byte[] Post(string url, HttpOptions options, Dictionary<string, string> param, string encoding = "utf-8")
            {
                var req = CreateRequest(url, options);
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
    
                StringBuilder builder = new StringBuilder();
                foreach (var key in param.Keys)
                {
                    builder.Append(key).Append("=").Append(param[key]).Append("&");
                }
    
                if (builder.Length > 0)
                {
                    builder.Remove(builder.Length - 1, 1);
                }
    
                var arr = Encoding.GetEncoding(encoding).GetBytes(builder.ToString());
                req.ContentLength = arr.Length;
    
                using (var stream = req.GetRequestStream())
                {
                    stream.Write(arr, 0, arr.Length);
                    stream.Close();
    
                    using (var resp = GetResponse(req))
                    {
                        var sr = resp.GetResponseStream();
                        MemoryStream memoryStream = StreamToMemoryStream(sr);
                        return StreamToByte(memoryStream);
                    }
                }
            }
            public static HttpWebRequest CreateRequest(string uri, HttpOptions options)
            {
                var req = (HttpWebRequest)WebRequest.Create(uri);
                req.Timeout = options.TimeOut;
                req.Proxy = null;
                req.KeepAlive = false;
                req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87";
                return req;
            }
            public static HttpWebResponse GetResponse(HttpWebRequest request)
            {
                var res = (HttpWebResponse)request.GetResponse();
                return res;
            }
            /// <summary>
            /// 网络流转成内存流
            /// </summary>
            /// <param name="sr"></param>
            /// <returns></returns>
            public static MemoryStream StreamToMemoryStream(Stream stream)
            {
                MemoryStream memoryStream = new MemoryStream();
                const int bufferLength = 1024;
                byte[] buffer = new byte[bufferLength];
                int actual;
                while ((actual = stream.Read(buffer,0,bufferLength)) > 0)
                {
                    memoryStream.Write(buffer, 0, actual);
                }
                memoryStream.Position = 0;
                return memoryStream;
            }
            /// <summary>
            /// 内存流转成字节流
            /// </summary>
            /// <param name="sr"></param>
            /// <returns></returns>
            public static byte[] StreamToByte(Stream sr)
            {
                byte[] bytes = new byte[sr.Length];
                sr.Read(bytes, 0, bytes.Length);
                sr.Seek(0, SeekOrigin.Begin);
                return bytes;
            }        


    参考链接:https://blog.csdn.net/fengziyun/java/article/details/7414891

  • 相关阅读:
    安装lnmp 时如何修改数据库数据存储地址及默认访问地址
    ubuntu 设置root用户密码并实现root用户登录
    解决ubuntu 远程连接问题
    linux 搭建FTP服务器
    PHP 根据ip获取对应的实际地址
    如何发布自己的composer包
    使用composer安装composer包报Your requirements could not be resolved to an installable set of packages
    laravel 框架配置404等异常页面
    使用Xshell登录linux服务器报WARNING! The remote SSH server rejected X11 forwarding request
    IoTSharp 已支持国产松果时序数据库PinusDB
  • 原文地址:https://www.cnblogs.com/youknowUL/p/12691888.html
Copyright © 2011-2022 走看看