如大家要轉載,請保留本人的著作權:
/*
*Description:在asp.NET代碼中同時post普通表單欄位和檔案表單欄位資料到指定的伺服器URL。
*Auther:chongchong2008-天真的好藍啊
*MSN:chongchong2008@msn.com
*QQ:154674958
*Blog:chongchong2008.cnblogs.com
*Dates:2012-02-28
*Copyright:ChongChong2008 YiChang HuBei China
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Net;
namespace HttpRequest
{
/// <summary>
/// description:http post請求用戶端
/// author:chongchong2008
/// 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 + "--\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);
}
#endregion
}
}
使用方法:
----------------------------------------------------------------------------------------------------------------
string url = "http://127.0.0.1/test/upload";//發送到的頁面的地址
string image_path = "c:/test.jpg";
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("id", "123");
httpRequestClient.SetFieldValue("user_name", "chongchong2008");
httpRequestClient.SetFieldValue("type_id", "1");
httpRequestClient.SetFieldValue("uploadfile", "test.jpg", "application/octet-stream", fileBytes);
string responseText;
bool uploaded = httpRequestClient.Upload(url, out responseText);
===========================================================================
referrer link: http://www.cnblogs.com/dotey/
============================================================================