您的位置:首页 > 移动开发 > 微信开发

C# CulPost,用于微信上传多媒体文件中的图片

2017-02-27 16:07 295 查看
/// <summary>

        /// 向指定的URL地址发起一个POST请求,同时可以上传一些数据项以及上传文件。

        /// </summary>

        /// <param name="url">要请求的URL地址</param>

        /// <param name="filepath">要上传的文件路径</param>

        /// <returns>服务器的返回结果</returns>

        public string CulPost(string url, string filepath)

        {

            string result = "";

            string contenttype = filepath.Substring(filepath.LastIndexOf('.') + 1, filepath.Length - filepath.LastIndexOf('.') - 1);

            string rawurl = url;

            FileStream fileStream = new FileStream(filepath, FileMode.Open, FileAccess.Read);

            BinaryReader br = new BinaryReader(fileStream);

            byte[] buffer = br.ReadBytes(Convert.ToInt32(fileStream.Length));

            string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");

            //请求

            WebRequest req = WebRequest.Create(rawurl);

            req.Method = "POST";

            req.ContentType = "multipart/form-data; boundary=" + boundary;

            //组织表单数据

            StringBuilder sb = new StringBuilder();

            sb.Append("--" + boundary + "\r\n");

            sb.Append("Content-Disposition: form-data; name=\"media\"; filename=\"" + filepath + "\"; filelength=\"" + fileStream.Length + "\"");

            sb.Append("\r\n");

            sb.Append("Content-Type: image/" + contenttype);

            sb.Append("\r\n\r\n");

            string head = sb.ToString();

            byte[] form_data = Encoding.UTF8.GetBytes(head);

            //结尾

            byte[] foot_data = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

            //post总长度

            long length = form_data.Length + fileStream.Length + foot_data.Length;

            req.ContentLength = length;

            Stream requestStream = req.GetRequestStream();

            //这里要注意一下发送顺序,先发送form_data > buffer > foot_data

            //发送表单参数

            requestStream.Write(form_data, 0, form_data.Length);

            //发送文件内容

            requestStream.Write(buffer, 0, buffer.Length);

            //结尾

            requestStream.Write(foot_data, 0, foot_data.Length);

            requestStream.Close();

            fileStream.Close();

            fileStream.Dispose();

            br.Close();

            br.Dispose();

            //响应

            WebResponse pos = req.GetResponse();

            using (StreamReader sr = new StreamReader(pos.GetResponseStream(), Encoding.UTF8))

            {

                result = sr.ReadToEnd();

            }

            return result;

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c#