zoukankan      html  css  js  c++  java
  • .net后台webclient用post方式发送文件和数据

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.IO;
    using System.Text;
    using System.Net;
     
    namespace BcpMobile.Handlers
    {
        /// <summary>
        /// description:http post请求客户端
        /// last-modified-date:2012-02-28
        /// </summary>
        public class HttpRequestClient
        {
            #region //字段
            private ArrayList bytesArray;
            private Encoding encoding = Encoding.UTF8;
            private string boundary = String.Empty;
            #endregion
     
            #region //构造方法
            public HttpRequestClient()
            {
                bytesArray = new ArrayList();
                string flag = DateTime.Now.Ticks.ToString("x");
                boundary = "---------------------------" + flag;
            }
            #endregion
     
            #region //方法
            /// <summary>
            /// 合并请求数据
            /// </summary>
            /// <returns></returns>
            private byte[] MergeContent()
            {
                int length = 0;
                int readLength = 0;
                string endBoundary = "--" + boundary + "--
    ";
                byte[] endBoundaryBytes = encoding.GetBytes(endBoundary);
     
                bytesArray.Add(endBoundaryBytes);
     
                foreach (byte[] b in bytesArray)
                {
                    length += b.Length;
                }
     
                byte[] bytes = new byte[length];
     
                foreach (byte[] b in bytesArray)
                {
                    b.CopyTo(bytes, readLength);
                    readLength += b.Length;
                }
     
                return bytes;
            }
     
            /// <summary>
            /// 上传
            /// </summary>
            /// <param name="requestUrl">请求url</param>
            /// <param name="responseText">响应</param>
            /// <returns></returns>
            public bool Upload(String requestUrl, out String responseText)
            {
                WebClient webClient = new WebClient();
                webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary);
     
                byte[] responseBytes;
                byte[] bytes = MergeContent();
     
                try
                {
                    responseBytes = webClient.UploadData(requestUrl, bytes);
                    responseText = System.Text.Encoding.UTF8.GetString(responseBytes);
                    return true;
                }
                catch (WebException ex)
                {
                    Stream responseStream = ex.Response.GetResponseStream();
                    responseBytes = new byte[ex.Response.ContentLength];
                    responseStream.Read(responseBytes, 0, responseBytes.Length);
                }
                responseText = System.Text.Encoding.UTF8.GetString(responseBytes);
                return false;
            }
     
            /// <summary>
            /// 设置表单数据字段
            /// </summary>
            /// <param name="fieldName">字段名</param>
            /// <param name="fieldValue">字段值</param>
            /// <returns></returns>
            public void SetFieldValue(String fieldName, String fieldValue)
            {
                string httpRow = "--" + boundary + "
    Content-Disposition: form-data; name="{0}"
    
    {1}
    ";
                string httpRowData = String.Format(httpRow, fieldName, fieldValue);
     
                bytesArray.Add(encoding.GetBytes(httpRowData));
            }
     
            /// <summary>
            /// 设置表单文件数据
            /// </summary>
            /// <param name="fieldName">字段名</param>
            /// <param name="filename">字段值</param>
            /// <param name="contentType">内容内型</param>
            /// <param name="fileBytes">文件字节流</param>
            /// <returns></returns>
            public void SetFieldValue(String fieldName, String filename, String contentType, Byte[] fileBytes)
            {
                string end = "
    ";
                string httpRow = "--" + boundary + "
    Content-Disposition: form-data; name="{0}"; filename="{1}"
    Content-Type: {2}
    
    ";
                string httpRowData = String.Format(httpRow, fieldName, filename, contentType);
     
                byte[] headerBytes = encoding.GetBytes(httpRowData);
                byte[] endBytes = encoding.GetBytes(end);
                byte[] fileDataBytes = new byte[headerBytes.Length + fileBytes.Length + endBytes.Length];
     
                headerBytes.CopyTo(fileDataBytes, 0);
                fileBytes.CopyTo(fileDataBytes, headerBytes.Length);
                endBytes.CopyTo(fileDataBytes, headerBytes.Length + fileBytes.Length);
     
                bytesArray.Add(fileDataBytes);
            }
            #endregion
        }
    }
    HttpRequestClient
      private void sendFileData(string sUrl, string pdfPathName, int member_id, string access_token, out string responseText)
            {
                string url = sUrl;//发送到的页面的地址
                string image_path = pdfPathName;//文件的位置
                FileStream fs = new FileStream(image_path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
     
                byte[] fileBytes = new byte[fs.Length];
                fs.Read(fileBytes, 0, fileBytes.Length);
                fs.Close();
                fs.Dispose();
     
                HttpRequestClient httpRequestClient = new HttpRequestClient();
                httpRequestClient.SetFieldValue("member_id", member_id.ToString());//发送数据
                httpRequestClient.SetFieldValue("access_token", access_token);//发送数据
                int pos = image_path.LastIndexOf("\");
                string fileName = image_path.Substring(pos + 1);
                httpRequestClient.SetFieldValue("key", fileName, "application/octet-stream", fileBytes);
                bool uploaded = httpRequestClient.Upload(url, out responseText);
    
    --------------------- 
    作者:zhgl7688 
    来源:CSDN 
    原文:https://blog.csdn.net/zhgl7688/article/details/51593434 
    版权声明:本文为博主原创文章,转载请附上博文链接!
    调用
         /// <summary>
            /// post发送数据
            /// </summary>
            ///  <param name="url">接收地址</param>
            /// <param name="postString">拼接Post字符串"arg1=a&arg2=b"</param>
            /// <returns></returns>
            public static string HttpUploadData(string url, string postString)
            {
                byte[] postData = Encoding.UTF8.GetBytes(postString);//编码,尤其是汉字,事先要看下抓取网页的编码方式  
                WebClient webClient = new WebClient();
                webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可  
                byte[] responseData = webClient.UploadData(url, "POST", postData);//得到返回字符流  
                return   Encoding.UTF8.GetString(responseData);//解码 
            }
    只发送数据可采用下列方法
  • 相关阅读:
    文字超出2行显示省略号
    js调试工具console方法详解
    下厨如有神
    画地为牢——广州经济困局
    数字桩和记忆术
    想象力提高记忆能力的重要能力
    三元色
    轻松自我介绍三步走——曼陀罗思考法
    英语单词_巩固方法草稿A
    http、TCP/IP协议与socket之间的区别
  • 原文地址:https://www.cnblogs.com/xjt360/p/10616414.html
Copyright © 2011-2022 走看看