.net模拟http post请求上传文件
来源:互联网 发布:uitableview优化 简书 编辑:程序博客网 时间:2024/05/02 04:11
public static string CreateHttpUploadFile(string url, Stream postedStream, string fileName, string cType, Dictionary<string, string> formDataDic)
{
if (string.IsNullOrEmpty(url))
throw new Exception("Upload Web URL Is Empty.");
String sReturnString = "";
//时间戳
string strBoundary = "----" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");
//请求头部信息
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append("file");
sb.Append("\"; filename=\"");
sb.Append(fileName);
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append(cType);
sb.Append("\r\n");
sb.Append("\r\n");
string strPostHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
//Our method is post, otherwise the buffer (postvars) would be useless
webRequest.Method = WebRequestMethods.Http.Post;
// Proxy setting
WebProxy proxy = new WebProxy();
proxy.UseDefaultCredentials = true;
webRequest.Proxy = proxy;
//We use form contentType, for the postvars.
webRequest.ContentType = "multipart/form-data;boundary=" + strBoundary; ;
webRequest.ContentLength = postedStream.Length + postHeaderBytes.Length + boundaryBytes.Length;
webRequest.Timeout = 300000;
if (formDataDic != null)
{
foreach (string key in formDataDic.Keys)
{
webRequest.Headers.Add(key, formDataDic[key]);
}
}
byte[] fileByte = new byte[postedStream.Length];
postedStream.Read(fileByte, 0, fileByte.Length);
using (Stream requestStream = webRequest.GetRequestStream())
{
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
requestStream.Write(fileByte, 0, fileByte.Length);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
requestStream.Close();
}
try
{
WebResponse resp = webRequest.GetResponse();
Stream s = resp.GetResponseStream();
StreamReader sr = new StreamReader(s);
//读取服务器端返回的消息
sReturnString = sr.ReadLine();
resp.Close();
sr.Close();
sr.Dispose();
s.Close();
s.Dispose();
}
catch (WebException ex)
{
HttpWebResponse response = ex.Response as HttpWebResponse;
if (response != null)
{
throw new WebException(response.StatusDescription, ex);
}
throw ex;
}
catch (Exception exception)
{
throw exception;
}
return sReturnString;
}
{
if (string.IsNullOrEmpty(url))
throw new Exception("Upload Web URL Is Empty.");
String sReturnString = "";
//时间戳
string strBoundary = "----" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");
//请求头部信息
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append("file");
sb.Append("\"; filename=\"");
sb.Append(fileName);
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append(cType);
sb.Append("\r\n");
sb.Append("\r\n");
string strPostHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
//Our method is post, otherwise the buffer (postvars) would be useless
webRequest.Method = WebRequestMethods.Http.Post;
// Proxy setting
WebProxy proxy = new WebProxy();
proxy.UseDefaultCredentials = true;
webRequest.Proxy = proxy;
//We use form contentType, for the postvars.
webRequest.ContentType = "multipart/form-data;boundary=" + strBoundary; ;
webRequest.ContentLength = postedStream.Length + postHeaderBytes.Length + boundaryBytes.Length;
webRequest.Timeout = 300000;
if (formDataDic != null)
{
foreach (string key in formDataDic.Keys)
{
webRequest.Headers.Add(key, formDataDic[key]);
}
}
byte[] fileByte = new byte[postedStream.Length];
postedStream.Read(fileByte, 0, fileByte.Length);
using (Stream requestStream = webRequest.GetRequestStream())
{
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
requestStream.Write(fileByte, 0, fileByte.Length);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
requestStream.Close();
}
try
{
WebResponse resp = webRequest.GetResponse();
Stream s = resp.GetResponseStream();
StreamReader sr = new StreamReader(s);
//读取服务器端返回的消息
sReturnString = sr.ReadLine();
resp.Close();
sr.Close();
sr.Dispose();
s.Close();
s.Dispose();
}
catch (WebException ex)
{
HttpWebResponse response = ex.Response as HttpWebResponse;
if (response != null)
{
throw new WebException(response.StatusDescription, ex);
}
throw ex;
}
catch (Exception exception)
{
throw exception;
}
return sReturnString;
}
0 0
- .net模拟http post请求上传文件
- .net模拟http post请求上传文件
- android模拟post请求上传文件
- java模拟post请求上传文件
- Http get、post请求、文件上传
- python发HTTP post请求上传文件
- HTTP 模拟post请求
- Net模拟http表单文件上传
- 模拟POST上传文件
- PHP CURL 模拟POST请求 提交数据或上传文件
- 模拟浏览器post请求 用java写上传文件后台
- 模拟HTTP请求, POST方法
- WinSock 模拟http post请求
- Android模拟Http POST 请求
- C#模拟HTTP POST 请求
- 使用Python发送http post请求上传文件
- post请求上传文件和文本时http格式
- http post 上传文件
- warning: integer overflow in expression (take this as a lesson)
- 1076. Forwards on Weibo (30)
- Cocos2d-x CocosWidget项目配置与API说明
- POJ 1017 Packets(构造模拟)
- 物联网开源论坛
- .net模拟http post请求上传文件
- .Documents
- chrome调试问题几个常见问题
- Servlet 详解
- Linux 命令图解5分钟系列[1] - 目录操作
- UIPageViewController翻页背景改变
- 微软SQL Server数据库的两种请求游标
- hdu 5163 前缀和+枚举
- exec 重定向