HttpWebRequest上传文件(Excel等)
//上传代码
/// <summary>
/// 文件上传
/// </summary>
/// <param name="strAddress">路径地址,不包括服务地址</param>
/// <param name="postedFile"></param>
/// <returns></returns>
public static IResponseResult HttpPostFile(string strAddress, HttpPostedFile postedFile,string reFileName)
{
string url = ConfigHelper.GetConfigString("PAOfferSystemAddress") + strAddress;
//1>创建请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//2>Cookie容器(保存cookie,只是上传文件,则可以注释掉)
//request.CookieContainer = cookieContainer;
request.Method = "POST";
request.Timeout = ;
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.KeepAlive = true; string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");//分界线
byte[] boundaryBytes = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n"); request.ContentType = "multipart/form-data; boundary=" + boundary;//内容类型 //3>表单数据模板
//string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}";
//4>读取流
byte[] buffer = new byte[postedFile.ContentLength];
postedFile.InputStream.Read(buffer, , buffer.Length); //5>写入请求流数据
string strHeader = "Content-Disposition:application/x-www-form-urlencoded; name=\"{0}\";filename=\"{1}\"\r\nContent-Type:{2}\r\n\r\n";
strHeader = string.Format(strHeader,
"filedata",
//postedFile.FileName,
reFileName + postedFile.FileName,
postedFile.ContentType);
//6>HTTP请求头
byte[] byteHeader = System.Text.ASCIIEncoding.UTF8.GetBytes(strHeader);
StringBuilder sbBody=new StringBuilder ();
sbBody.Append(System.Text.Encoding.UTF8.GetString(boundaryBytes));
sbBody.Append(System.Text.Encoding.UTF8.GetString(byteHeader));
sbBody.Append(System.Text.Encoding.UTF8.GetString(buffer));
sbBody.Append(System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n")));
string headValue = Encrpt(sbBody.ToString());//加密
request.Headers.Add("OfferServiceAuthorization", headValue);
request.Headers.Add("CustomID", ConfigurationManager.AppSettings["CustomID"]); try
{
using (Stream stream = request.GetRequestStream())
{
#region 写入请求流(表单数据)
//写入请求流(表单数据)
//if (null != parameters)
//{
// foreach (KeyValuePair<string, object> item in parameters)
// {
// stream.Write(boundaryBytes, 0, boundaryBytes.Length);//写入分界线
// byte[] formBytes = System.Text.Encoding.UTF8.GetBytes(string.Format(formdataTemplate, item.Key, item.Value));
// stream.Write(formBytes, 0, formBytes.Length);
// }
//}
#endregion
//6.0>分界线============================================注意:缺少次步骤,可能导致远程服务器无法获取Request.Files集合
stream.Write(boundaryBytes, , boundaryBytes.Length);
//6.1>请求头
stream.Write(byteHeader, , byteHeader.Length);
//6.2>把文件流写入请求流
stream.Write(buffer, , buffer.Length);
//6.3>写入分隔流
byte[] trailer = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
stream.Write(trailer, , trailer.Length);
//6.4>关闭流
stream.Close();
}
string responseContent = "";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
responseContent = streamReader.ReadToEnd();
response.Close();
request.Abort();
} return JsonConvertHelper.DataContractToModel<IResponseResult>(responseContent);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
} //服务器代码
HttpPostedFile file = Context.Request.Files["filedata"];//获取上传文件
if (null == file || file.ContentLength == )
{
IResponseResult responseResult = new IResponseResult();
responseResult.Status = ResponseStatus.Fail;
responseResult.Message = "Upload file is invalid";
//to json返回结果
string toJson = JsonConvertHelper.ToJson(responseResult);
Response.Write(toJson);
}
else
{
string filePath = Server.MapPath("~/File/Excel");
if (!Directory.Exists(filePath))//判断文件夹是否存在
{
Directory.CreateDirectory(filePath);//不存在则创建文件夹
}
file.SaveAs(string.Format("{0}/{1}", filePath, file.FileName));
IResponseResult responseResult = new IResponseResult();
responseResult.Status = ResponseStatus.Success;
string toJson = JsonConvertHelper.ToJson(responseResult);
Response.Write(toJson);
}
HttpWebRequest上传文件(Excel等)的更多相关文章
- 关于HttpWebRequest上传文件
我们web 操作离不开 http请求响应 HttpWebRequest上传文件也是一样的道理 下面码一些代码: private void UploadFile(string strRequestUri ...
- HTTPWebrequest上传文件--Upload files with HTTPWebrequest (multipart/form-data)
使用HTTPWebrequest上传文件遇到问题,可以参考Upload files with HTTPWebrequest (multipart/form-data)来解决 https://stack ...
- C#在WinForm下使用HttpWebRequest上传文件
转自:http://blog.csdn.net/shihuan10430049/article/details/3734398 这段时间因项目需要,要实现WinForm下的文件上传,个人觉得采用FTP ...
- [转]C#在WinForm下使用HttpWebRequest上传文件并显示进度
/// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <param name=&qu ...
- 上传读取Excel文件数据
/// <summary> /// 上传读取Excel文件数据 /// 来自http://www.cnblogs.com/cielwater /// </summary> // ...
- C# 使用HttpWebRequest通过PHP接口 上传文件
1:上传文件实例 public void UploadXMLLog(string xmlpath) { NameValueCollection nvc = ne ...
- .NET 客户端上传本地excel文件到服务器上,并在客户端显示
// 上传按钮 protected void btnUp_Click(object sender, EventArgs e) { bool b = Upload(fuExcel); // 上传exce ...
- springMVC从上传的Excel文件中读取数据
示例:导入客户文件(Excle文件) 一.编辑customer.xlsx 二.在spring的xml文件设置上传文件大小 <!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1 ...
- ASP.NET上传文件到远程服务器(HttpWebRequest)
/// <summary> /// 文件上传至远程服务器 /// </summary> /// <param name="url">远程服务地址 ...
随机推荐
- MS-SQL数据库备份方法
一.手动备份 打开企业管理器 --> 右键点击需要备份的数据库 --> 所有任务 --> 备份数据库 或者: 查询分析器: use master backup database 数 ...
- ORACLE SQL 组函数【weber出品必属精品】
组函数:对一组数据进行加工,每组数据返回一个值 常用的组函数:count() avg() max() min() sum() count()函数 1. count(*) :返回总共的行 ...
- iOS_SN_Xcode内存泄露调试
用Xcode进行内存调试有两种方法: 1.静态方法 2.动态方法 静态方法是直接在Xcode的菜单栏中选择product-->analyze 如截图所示. 之后会看到Xcode的编译状态上会有如 ...
- GDB调试一
http://blog.csdn.net/haoel/article/details/2881 GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行 ...
- (原)10-folder交叉验证
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6069731.html 参考网址: https://github.com/cmusatyalab/ope ...
- CSS注意事项
1.定义样式不能就加:隔开 当有定义的css样式并没有起作用的时候看看定义该样式前边有没有加“;”的如 p{};div{}
- POJ1015 动态规划
POJ1015 问题重述: 在n个候选者中选取m个人进入陪审团.每个候选者获得两项评分:D[j],P[j].求解最佳评审团,使得在每个成员的两项评分和之差 最小的情况下,使得两项评分和之和 最大. 分 ...
- 有关service
在symfony2 服务注入容器的时候参数语法可以是这样: cellcom.twig.menu_extension: class: Cellcom\WebBundle\Twig\Extension\M ...
- vi 编辑器初步
vi 编辑器初步 4,vi进入后是命令模式 ,可以用i o s 进入插入模式 i ,在当前字符位置插入,o为新开一行插入,s删除当前字符添加 5,r 为直接替换当前字符 6,到行头按0,$为到行尾到未 ...
- [spoj104][Highways] (生成树计数+矩阵树定理+高斯消元)
In some countries building highways takes a lot of time... Maybe that's because there are many possi ...