[C#]使用WebClient上传文件并同时Post表单数据字段到服务端

摘要:
测试花费了大量时间,发现WebClient不能以这种方式使用。谷歌发现,互联网上的一些文章要么太简单,要么太复杂,所以这里有一个简单的整理,帮助您巩固知识,并希望对您有所帮助!如果你什么都不懂,可以留言直接问我。

转自:http://www.97world.com/archives/2963

   之前遇到一个问题,就是使用WebClient上传文件的同时,还要Post表单数据字段,一开始以为WebClient可以直接做到,结果发现如果先Post表单字段,就只能获取到字段及其值,如果先上传文件,也只能获取到上传文件的内容。测试了不少时间才发现WebClient不能这么使用。

    Google到相关的解决思路和类,因为发现网上的一些文章不是介绍得太简单就是太复杂,所以这里简单整理一下,既能帮助自己巩固知识,也希望能够帮到大家!如果大家有什么不明白,可以直接留言问我。

    关于WebClient上传文件并同时Post表单数据的实现原理,大家可以参考这篇文章http://www.cnblogs.com/goody9807/archive/2007/06/06/773735.html,介绍得非常详细,但是类和实例有些模糊,所以类和实例可以直接参考本文。

HttpRequestClient类Code:
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Net;
 
namespace Common.Helper
{
  /// <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
  }
}
客户端实例代码:
01
02
03
04
05
06
07
08
09
10
string fileFullName=@"c: est.txt",filedValue="hello_world",responseText = "";
FileStream fs = new FileStream(fileFullName, 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("key", filedValue);
httpRequestClient.SetFieldValue("uploadfile", Path.GetFileName(fileFullName), "application/octet-stream", fileBytes);
httpRequestClient.Upload(NormalBotConfig.Instance.GetUploadFileUrl(), out responseText);
服务端实例代码:
1
2
3
4
5
6
7
8
if (HttpContext.Current.Request.Files.AllKeys.Length > 0)
{
  string filePath = Path.Combine(HttpContext.Current.Server.MapPath("~/"), "UploadFile", DateTime.Now.Year.ToString(), DateTime.Now.Month.ToString(), DateTime.Now.Day.ToString());
  if (!Directory.Exists(filePath)) Directory.CreateDirectory(filePath);
  //这里我直接用索引来获取第一个文件,如果上传了多个文件,可以通过遍历HttpContext.Current.Request.Files.AllKeys取“key值”,再通过HttpContext.Current.Request.Files[“key值”]获取文件
  HttpContext.Current.Request.Files[0].SaveAs(Path.Combine(filePath, HttpContext.Current.Request.Files[0].FileName));
  string filedValue = HttpContext.Current.Request.Form["key"];
}

使用WebClient或HttpWebRequest模拟上传文件和数据

假如某网站有个表单,例如(url: http://localhost/login.aspx):
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张帐号  
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张密码  
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张我们需要在程序中提交数据到这个表单,对于这种表单,我们可以使用 WebClient.UploadData 方法来实现,将所要上传的数据拼成字符即可,程序很简单:
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张string uriString = "http://localhost/login.aspx";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张// 创建一个新的 WebClient 实例.
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张WebClient myWebClient = new WebClient();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张string postData = "Username=admin&Password=admin";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张// 注意这种拼字符串的ContentType
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张myWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded");
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张// 转化成二进制数组
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张byte[] byteArray = Encoding.ASCII.GetBytes(postData);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张// 上传数据,并获取返回的二进制数据.
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张byte[] responseArray = myWebClient.UploadData(uriString,"POST",byteArray);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张对于文件上传类的表单,例如(url: http://localhost/uploadFile.aspx):
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张文件  
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张对于这种表单,我们可以使用
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张String uriString = "http://localhost/uploadFile.aspx";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张// 创建一个新的 WebClient 实例.
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张WebClient myWebClient = new WebClient();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张string fileName = @"C:upload.txt";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张// 直接上传,并获取返回的二进制数据.
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张byte[] responseArray = myWebClient.UploadFile(uriString,"POST",fileName);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张还有一种表单,不仅有文字,还有文件,例如(url: http://localhost/uploadData.aspx):
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张文件名  
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张文件  
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张对于这种表单,似乎前面的两种方法都不能适用,对于第一种方法,不能直接拼字符串,对于第二种,我们只能传文件,重新回到第一个方法,注意参数:
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张public byte[] UploadData(
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张   string address,
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张   string method,
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张   byte[] data
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张在第一个例子中,是通过拼字符串来得到byte[] data参数值的,对于这种表单显然不行,反过来想想,对于uploadData.aspx这样的程序来说,直接通过网页提交数据,后台所获取到的流是什么样的呢?(在我以前的一篇blog中,曾分析过这个问题:asp无组件上传进度条解决方案),最终的数据如下:
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张-----------------------------7d429871607fe
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张Content-Disposition: form-data; name="file1"; filename="G:homepage.txt"
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张Content-Type: text/plain
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张宝玉:http://www.webuc.net
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张-----------------------------7d429871607fe
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张Content-Disposition: form-data; name="filename"
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张default filename
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张-----------------------------7d429871607fe--
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张所以只要拼一个这样的byte[] data数据Post过去,就可以达到同样的效果了。但是一定要注意,对于这种带有文件上传的,其ContentType是不一样的,例如上面的这种,其ContentType为"multipart/form-data; boundary=---------------------------7d429871607fe"。有了ContentType,我们就可以知道boundary(就是上面的"---------------------------7d429871607fe"),知道boundary了我们就可以构造出我们所需要的byte[] data了,最后,不要忘记,把我们构造的ContentType传到WebClient中(例如:webClient.Headers.Add("Content-Type", ContentType);)这样,就可以通过WebClient.UploadData 方法上载文件数据了。
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张具体代码如下:
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张生成二进制数据类的封装
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.Web;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.IO;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.Net;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.Text;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.Collections;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张namespace UploadData.Common
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第68张[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张    /**//// <summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张    /// 创建WebClient.UploadData方法所需二进制数组
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张    /// </summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张    public class CreateBytes
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张    [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        Encoding encoding = Encoding.UTF8;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        /**//// <summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// 拼接所有的二进制数组为一个数组
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// </summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <param name="byteArrays">数组</param>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <returns></returns>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        /// <remarks>加上结束边界</remarks>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        public byte[] JoinBytes(ArrayList byteArrays)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            int length = 0;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            int readLength = 0;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 加上结束边界
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            string endBoundary = Boundary + "-- "; //结束边界
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byte[] endBoundaryBytes = encoding.GetBytes(endBoundary);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byteArrays.Add(endBoundaryBytes);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            foreach(byte[] b in byteArrays)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                length += b.Length;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张            }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byte[] bytes = new byte[length];
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 遍历复制
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            //
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            foreach(byte[] b in byteArrays)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                b.CopyTo(bytes, readLength);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                readLength += b.Length;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张            }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            return bytes;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        public bool UploadData(string uploadUrl, byte[] bytes, out byte[] responseBytes)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            WebClient webClient = new WebClient();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            webClient.Headers.Add("Content-Type", ContentType);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            try
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                responseBytes = webClient.UploadData(uploadUrl, bytes);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                return true;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张            }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            catch (WebException ex)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                Stream resp = ex.Response.GetResponseStream();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                responseBytes = new byte[ex.Response.ContentLength];
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                resp.Read(responseBytes, 0, responseBytes.Length);                
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张            }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            return false; 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        /**//// <summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// 获取普通表单区域二进制数组
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// </summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <param name="fieldName">表单名</param>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <param name="fieldValue">表单值</param>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <returns></returns>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <remarks>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// -----------------------------7d52ee27210a3c Content-Disposition: form-data; name="表单名" 表单值
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        /// </remarks>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        public byte[] CreateFieldData(string fieldName, string fieldValue)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            string textTemplate = Boundary + " Content-Disposition: form-data; name="{0}" {1} ";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            string text = String.Format(textTemplate, fieldName, fieldValue);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byte[] bytes = encoding.GetBytes(text);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            return bytes;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        /**//// <summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// 获取文件上传表单区域二进制数组
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// </summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <param name="fieldName">表单名</param>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <param name="filename">文件名</param>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <param name="contentType">文件类型</param>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <param name="contentLength">文件长度</param>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// <param name="stream">文件流</param>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        /// <returns>二进制数组</returns>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        public byte[] CreateFieldData(string fieldName, string filename,string contentType, byte[] fileBytes)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            string end = " ";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            string textTemplate = Boundary + " Content-Disposition: form-data; name="{0}"; filename="{1}" Content-Type: {2} ";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 头数据
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            string data = String.Format(textTemplate, fieldName, filename, contentType);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byte[] bytes = encoding.GetBytes(data);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 尾数据
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byte[] endBytes = encoding.GetBytes(end);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 合成后的数组
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byte[] fieldData = new byte[bytes.Length + fileBytes.Length + endBytes.Length];
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            bytes.CopyTo(fieldData, 0); // 头数据
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            fileBytes.CopyTo(fieldData, bytes.Length); // 文件的二进制数据
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            endBytes.CopyTo(fieldData, bytes.Length + fileBytes.Length); // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            return fieldData;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第192张        属性属性
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张    }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第194张}
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张在Winform中调用
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.Drawing;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.Collections;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.ComponentModel;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.Windows.Forms;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.Data;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using UploadData.Common;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张using System.IO;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第1张namespace UploadDataWin
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第68张[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张    /**//// <summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张    /// frmUpload 的摘要说明。
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张    /// </summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张    public class frmUpload : System.Windows.Forms.Form
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张    [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.Label lblAmigoToken;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.TextBox txtAmigoToken;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.Label lblFilename;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.TextBox txtFilename;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.Button btnBrowse;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.TextBox txtFileData;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.Label lblFileData;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.Button btnUpload;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.OpenFileDialog openFileDialog1;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.Windows.Forms.TextBox txtResponse;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        /**//// <summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// 必需的设计器变量。
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        /// </summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private System.ComponentModel.Container components = null;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        public frmUpload()
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            //
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // Windows 窗体设计器支持所必需的
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            //
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            InitializeComponent();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            //
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            //
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        /**//// <summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// 清理所有正在使用的资源。
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        /// </summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        protected override void Dispose( bool disposing )
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            if( disposing )
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                if (components != null) 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张                [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                    components.Dispose();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张                }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张            }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            base.Dispose( disposing );
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        /**//// <summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// 此方法的内容。
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        /// </summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private void InitializeComponent()
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblAmigoToken = new System.Windows.Forms.Label();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtAmigoToken = new System.Windows.Forms.TextBox();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFilename = new System.Windows.Forms.Label();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFilename = new System.Windows.Forms.TextBox();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnBrowse = new System.Windows.Forms.Button();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFileData = new System.Windows.Forms.TextBox();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFileData = new System.Windows.Forms.Label();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnUpload = new System.Windows.Forms.Button();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtResponse = new System.Windows.Forms.TextBox();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.SuspendLayout();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // lblAmigoToken
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblAmigoToken.Location = new System.Drawing.Point(40, 48);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblAmigoToken.Name = "lblAmigoToken";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblAmigoToken.Size = new System.Drawing.Size(72, 23);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblAmigoToken.TabIndex = 0;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblAmigoToken.Text = "AmigoToken";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // txtAmigoToken
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtAmigoToken.Location = new System.Drawing.Point(120, 48);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtAmigoToken.Name = "txtAmigoToken";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtAmigoToken.Size = new System.Drawing.Size(248, 21);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtAmigoToken.TabIndex = 1;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtAmigoToken.Text = "";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // lblFilename
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFilename.Location = new System.Drawing.Point(40, 96);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFilename.Name = "lblFilename";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFilename.Size = new System.Drawing.Size(80, 23);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFilename.TabIndex = 2;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFilename.Text = "Filename";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // txtFilename
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFilename.Location = new System.Drawing.Point(120, 96);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFilename.Name = "txtFilename";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFilename.Size = new System.Drawing.Size(248, 21);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFilename.TabIndex = 3;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFilename.Text = "";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // btnBrowse
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnBrowse.Location = new System.Drawing.Point(296, 144);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnBrowse.Name = "btnBrowse";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnBrowse.TabIndex = 4;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnBrowse.Text = "浏览[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // txtFileData
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFileData.Location = new System.Drawing.Point(120, 144);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFileData.Name = "txtFileData";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFileData.Size = new System.Drawing.Size(168, 21);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFileData.TabIndex = 5;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtFileData.Text = "";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // lblFileData
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFileData.Location = new System.Drawing.Point(40, 144);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFileData.Name = "lblFileData";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFileData.Size = new System.Drawing.Size(72, 23);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFileData.TabIndex = 6;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.lblFileData.Text = "FileData";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // btnUpload
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnUpload.Location = new System.Drawing.Point(48, 184);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnUpload.Name = "btnUpload";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnUpload.TabIndex = 7;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnUpload.Text = "Upload";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // txtResponse
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtResponse.Location = new System.Drawing.Point(136, 184);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtResponse.Multiline = true;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtResponse.Name = "txtResponse";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtResponse.Size = new System.Drawing.Size(248, 72);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtResponse.TabIndex = 8;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.txtResponse.Text = "";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // frmUpload
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.ClientSize = new System.Drawing.Size(400, 269);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Controls.Add(this.txtResponse);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Controls.Add(this.btnUpload);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Controls.Add(this.lblFileData);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Controls.Add(this.txtFileData);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Controls.Add(this.btnBrowse);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Controls.Add(this.txtFilename);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Controls.Add(this.lblFilename);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Controls.Add(this.txtAmigoToken);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Controls.Add(this.lblAmigoToken);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Name = "frmUpload";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.Text = "frmUpload";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            this.ResumeLayout(false);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        #endregion
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        /**//// <summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        /// 应用程序的主入口点。
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        /// </summary>
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        [STAThread]
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        static void Main() 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            Application.Run(new frmUpload());
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private void btnUpload_Click(object sender, System.EventArgs e)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 非空检验
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            if (txtAmigoToken.Text.Trim() == "" || txtFilename.Text == "" || txtFileData.Text.Trim() == "")
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                MessageBox.Show("Please fill data");
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                return;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张            }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 所要上传的文件路径
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            string path = txtFileData.Text.Trim();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 检查文件是否存在
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            if (!File.Exists(path)) 
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                MessageBox.Show("{0} does not exist!", path);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                return;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张            }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 读文件流
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            FileStream fs = new FileStream(path, FileMode.Open,
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                FileAccess.Read, FileShare.Read);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 这部分需要完善
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            string ContentType = "application/octet-stream";
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byte[] fileBytes = new byte[fs.Length];
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            fs.Read(fileBytes, 0, Convert.ToInt32(fs.Length));
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 生成需要上传的二进制数组
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            CreateBytes cb = new CreateBytes();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 所有表单数据
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            ArrayList bytesArray = new ArrayList();
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 普通表单
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            bytesArray.Add(cb.CreateFieldData("FileName", txtFilename.Text));
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            bytesArray.Add(cb.CreateFieldData("AmigoToken", txtAmigoToken.Text));
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 文件表单
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            bytesArray.Add(cb.CreateFieldData("FileData", path
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                                                , ContentType, fileBytes));
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 合成所有表单并生成二进制数组
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byte[] bytes = cb.JoinBytes(bytesArray);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 返回的内容
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            byte[] responseBytes;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 上传到指定Url
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            bool uploaded = cb.UploadData("http://localhost/UploadData/UploadAvatar.aspx", bytes, out responseBytes);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            // 将返回的内容输出到文件
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            using (FileStream file = new FileStream(@"c: esponse.text", FileMode.Create, FileAccess.Write, FileShare.Read))
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                file.Write(responseBytes, 0, responseBytes.Length);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张            }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            txtResponse.Text = System.Text.Encoding.UTF8.GetString(responseBytes);
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张        private void btnBrowse_Click(object sender, System.EventArgs e)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张        [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张            if(openFileDialog1.ShowDialog() == DialogResult.OK)
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第70张            [C#]使用WebClient上传文件并同时Post表单数据字段到服务端第69张{
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张                txtFileData.Text = openFileDialog1.FileName;
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张            }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第71张
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张        }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第72张    }
[C#]使用WebClient上传文件并同时Post表单数据字段到服务端第194张}

免责声明:文章转载自《[C#]使用WebClient上传文件并同时Post表单数据字段到服务端》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux之telnet详解查询语句有 or 会导致查询速度变慢问题解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JQuery选择器大全

jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $("div") 选择所有的div标签元素,返回div元素数组 $(".myClass") 选择使用myClass类的css的所有...

jmeter随笔(2)--post接口参数化问题

今天试着做了一下post接口测试,并对其输入的参数进行参数化设置,在这里总结一下测试的过程中遇到的问题,以及解决方式: 一、使用body data设置参数: 1,首先,使用Fiddler录制post请求,并发送成功,导成jmx格式,并用jmeter打开; 2,此时,不设置参数,运行,OK,运行成功,其传递的值为以下格式: {"tagid":"aaaaa",...

关于HTTP协议,一篇就够了

HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 HTTP是一个属于应用层的面向对象的协议,由于其简捷...

Spring Boot中@OneToMany与@ManyToOne几个需要注意的问题

@OneToMany如果不加@JoinColumn,系统会自动在主从表中增加一个中间表。 主表: @Entity(name = "Post") public class Post {       @Id     @GeneratedValue     private Long id;       private String title;       @O...

YII2常用笔记

原文出处:http://www.cnblogs.com/chuanqideya/p/6120997.html Request 要获取请求参数,你可以调用 request 组件的 yiiwebRequest::get() 方法和 yiiwebRequest::post() 方法。 他们分别返回 $_GET和 $_POST 的值。例如, $request =...

Axja(2) post()和get()方法

  load()方法是局部方法,因为他需要一个包含元素的jQuery 对象作为前缀。而$.get()和$.post()是全局方法,无须指定某个元素。对于用途而言,.load()适合做静态文件的异步获取,而对于需要传递参数到服务器页面的,$.get()和$.post()更加合适。 jQuery.post(url, [data], [callback], [t...