123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- using System;
- using System.Collections;
- using System.IO;
- using System.Net;
- using System.Text;
- namespace MySystem
- {
- public class HttpUpload
- {
- private ArrayList bytesArray;
- private Encoding encoding = Encoding.UTF8;
- private string boundary = String.Empty;
- public HttpUpload()
- {
- bytesArray = new ArrayList();
- string flag = DateTime.Now.Ticks.ToString("x");
- boundary = "---------------------------" + flag;
- }
- /// <summary>
- /// 合并请求数据
- /// </summary>
- /// <returns></returns>
- private byte[] MergeContent()
- {
- int length = 0;
- int readLength = 0;
- string endBoundary = "--" + boundary + "--\r\n";
- 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 + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n";
- 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 = "\r\n";
- string httpRow = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
- 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);
- }
- }
- }
|