62,046
社区成员
发帖
与我相关
我的任务
分享
#region HttpWebRequest上传文件
/// <summary>
/// 利用HttpWebRequest上传文件
/// </summary>
/// <param name="loginurl">登录验证接口URL</param>
/// <param name="loginbody"></param>
/// <param name="logincontentType"></param>
/// <param name="filename">文件名称</param>
/// <param name="filetype">文件类型PostedFile.ContentType</param>
/// <param name="posturl">接收文件的接口URL</param>
/// <returns></returns>
public static string UploadFileHttpRequest(string loginurl, string loginbody, string logincontentType, string filename, string filetype, string posturl, byte[] filebyte)
{
HttpWebRequest uploadRequest = null;
#region 登录
uploadRequest = (HttpWebRequest)WebRequest.Create(loginurl);
uploadRequest.ContentType = logincontentType;
uploadRequest.Method = "POST";
uploadRequest.Timeout = 1000 * 60;
uploadRequest.CookieContainer = mycookie;
byte[] btBodys = Encoding.UTF8.GetBytes(loginbody);
uploadRequest.ContentLength = btBodys.Length;
uploadRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
HttpWebResponse httpWebResponse = (HttpWebResponse)uploadRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
string responseContent = streamReader.ReadToEnd();
//httpWebResponse.Cookies = mycookie.GetCookies(uploadRequest.RequestUri);//获取一个包含url的cookie集合的cookiecollection
mycookie.Add(httpWebResponse.Cookies);
#endregion
//边界
string boundary = DateTime.Now.Ticks.ToString("x");
uploadRequest = (HttpWebRequest)WebRequest.Create(posturl);//url为上传的地址
uploadRequest.ContentType = "application/octet-stream; boundary=" + boundary;
//uploadRequest.ContentType = filetype;
uploadRequest.Method = "POST";
uploadRequest.Accept = "*/*";
uploadRequest.KeepAlive = true;
uploadRequest.CookieContainer = mycookie;
//uploadRequest.Headers.Add("Accept-Language", "zh-cn");
//uploadRequest.Headers.Add("Accept-Encoding", "gzip, deflate");
uploadRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
uploadRequest.Headers.Add("Cookie", mycookie.ToString());//上传文件时需要的cookies
WebResponse reponse;
//创建一个内存流
Stream memStream = new MemoryStream();
//确定上传的文件路径
if (!String.IsNullOrEmpty(filename))
{
boundary = "--" + boundary;
//添加上传文件参数格式边界
string paramFormat = boundary + "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}\r\n";
NameValueCollection param = new NameValueCollection();
param.Add("upload", Path.GetExtension(filename));
//写上参数
foreach (string key in param.Keys)
{
string formitem = string.Format(paramFormat, key, param[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
memStream.Write(formitembytes, 0, formitembytes.Length);
}
//添加上传文件数据格式边界
string dataFormat = boundary + "\r\nContent-Disposition: form-data; name=\"{0}\";uploadFileName=\"{1}\"\r\nmultipart/form-data\r\n\r\n";
string header = string.Format(dataFormat, "upload", Path.GetFileName(filename));
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
memStream.Write(headerbytes, 0, headerbytes.Length);
//获取文件内容
FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[fileStream.Length];
int bytesRead = 0;
//将文件内容写进内存流
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}
fileStream.Close();
//添加文件结束边界
byte[] boundarybytes = System.Text.Encoding.UTF8.GetBytes("\r\n\r\n" + boundary + "\r\nContent-Disposition: form-data; name=\"upload\"\r\n\nSubmit Query\r\n" + boundary + "--");
memStream.Write(boundarybytes, 0, boundarybytes.Length);
//设置请求长度
uploadRequest.ContentLength = memStream.Length;
//获取请求写入流
using (Stream requestStream = uploadRequest.GetRequestStream())
{
//将内存流数据读取位置归零
memStream.Position = 0;
byte[] tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();
//将内存流中的buffer写入到请求写入流
requestStream.Write(tempBuffer, 0, tempBuffer.Length);
requestStream.Close();
}
}
string content = "";
try
{
//获取到上传请求的响应
reponse = uploadRequest.GetResponse();
StreamReader reader = new StreamReader(reponse.GetResponseStream(), Encoding.UTF8);
content = reader.ReadToEnd();
}
catch (Exception ex)
{
StringUtil.WriteLog(ex.Message);
}
return content;
}
#endregion
//调用实例
NameValueCollection nvc = new NameValueCollection();
nvc.Add("id", "TTR");
nvc.Add("btn-submit-photo", "upload");
#region HttpUploadFile上传文件
/// <summary>
///
/// </summary>
/// <param name="loginurl">https网址</param>
/// <param name="loginbody">是要传递的参数,格式"roleId=1&uid=2"</param>
/// <param name="logincontentType">"post的cotentType填写:application/x-www-form-urlencoded",soap填写:"text/xml; charset=utf-8"</param>
/// <param name="posturl"></param>
/// <param name="file"></param>
/// <param name="paramName"></param>
/// <param name="contentType"></param>
/// <param name="nvc"></param>
/// <returns></returns>
public static string HttpUploadFile(string loginurl, string loginbody, string logincontentType, string posturl, string file, string paramName, string contentType, NameValueCollection nvc)
{
HttpWebRequest uploadRequest = null;
#region 登录
uploadRequest = (HttpWebRequest)WebRequest.Create(loginurl);
uploadRequest.ContentType = logincontentType;
uploadRequest.Method = "POST";
uploadRequest.Timeout = 1000 * 3600;
uploadRequest.CookieContainer = mycookie;
byte[] btBodys = Encoding.UTF8.GetBytes(loginbody);
uploadRequest.ContentLength = btBodys.Length;
uploadRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
HttpWebResponse httpWebResponse = (HttpWebResponse)uploadRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
string responseContent = streamReader.ReadToEnd();
//httpWebResponse.Cookies = mycookie.GetCookies(uploadRequest.RequestUri);//获取一个包含url的cookie集合的cookiecollection
mycookie.Add(httpWebResponse.Cookies);
#endregion
string result = string.Empty;
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
uploadRequest = (HttpWebRequest)WebRequest.Create(posturl);
uploadRequest.ContentType = "multipart/form-data; boundary=" + boundary;
uploadRequest.Method = "POST";
uploadRequest.KeepAlive = true;
uploadRequest.CookieContainer = mycookie;
uploadRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
uploadRequest.Timeout = 1000 * 3600;
Stream rs = uploadRequest.GetRequestStream();
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
foreach (string key in nvc.Keys)
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, nvc[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
rs.Write(formitembytes, 0, formitembytes.Length);
}
rs.Write(boundarybytes, 0, boundarybytes.Length);
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
string header = string.Format(headerTemplate, paramName, file, contentType);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
//文件流
FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[fileStream.Length];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
rs.Write(buffer, 0, bytesRead);
}
fileStream.Close();
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
rs.Write(trailer, 0, trailer.Length);
rs.Close();
WebResponse wresp = null;
try
{
wresp = uploadRequest.GetResponse();
Stream stream2 = wresp.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
result = reader2.ReadToEnd();
}
catch (Exception ex)
{
if (wresp != null)
{
wresp.Close();
wresp = null;
}
StringUtil.WriteLog(ex.Message);
}
finally
{
uploadRequest = null;
}
return result;
}
#endregion
调用方法:
string loginurl = "http://....";
string posturl = "http://...";
string username = "...";
string pwd = "...";
string para = "username=" + username + "&pwd=" + pwd;
string responseData = "";
try
{
responseData = HttpHelper.PostHttp(loginurl, para, "application/x-www-form-urlencoded");
StringUtil.WriteLog("登录:" + responseData);
if (responseData.Contains("执行成功"))
{
//string fname = filename + "-" + filetimes + ".zip";
string fname = filename;
StringUtil.WriteLog("上传开始");
//调用实例
NameValueCollection nvc = new NameValueCollection();
nvc.Add("id", "TTR");
nvc.Add("btn-submit-photo", "upload");
HttpHelper.HttpUploadFile(loginurl, para, "application/x-www-form-urlencoded", posturl, path + "\\" + fname, "upload", "multipart/form-data", nvc);
StringUtil.WriteLog("上传:" + responseData);
}
}
catch (Exception ex)
{
StringUtil.WriteLog(ex.Message);
}
finally
{
}