日期:2014-05-17 浏览次数:20619 次
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace CompleteClient
{
/// <summary>
/// 文件发送工作类
/// </summary>
class PostFile
{
/// <summary>
/// 通过post发送指定文件的指定字段到指定的uri上
/// </summary>
/// <param name="uploadfile">上传文件路径</param>
/// <param name="url">上传的到的URi位置</param>
/// <param name="offset">当前偏移量</param>
/// <param name="size">需要发送的块大小</param>
/// <param name="fileFormName">服务器端"GET"取得的文件名</param>
/// <param name="contenttype">文件类型(保留用)</param>
/// <param name="querystring">GET数组(供服务器用GET取得一些信息)</param>
/// <param name="cookies">本地cookies(保留用)</param>
/// <returns>uri的response的内容以string的形式返回</returns>
public string UploadFileEx(string uploadfile, string url, long offset, long size,
string fileFormName, string contenttype,
NameValueCollection querystring, CookieContainer cookies)
{
if ((fileFormName == null) ||
(fileFormName.Length == 0))
{
fileFormName = "file";
}
if ((contenttype == null) ||
(contenttype.Length == 0))
{
contenttype = "application/octet-stream";
}
string postdata;
postdata = "?";
if (querystring != null)
{
foreach (string key in querystring.Keys)
{
postdata += key + "=" + querystring.Get(key) + "&";
}
}
Uri uri = new Uri(url + postdata);
string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.CookieContainer = cookies;
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
webrequest.Method = "POST";
// 构造一个post请求的http头
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append(fileFormName);
sb.Append("\"; filename=\"");
sb.Append(Path.GetFileName(uploadfile));
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append(contenttype);
sb.Append("\r\n");
sb.Append("\r\n");
string postHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);
// Build the trailing boundary string as a byte array
// ensuring the boundary appe