Wince 6.0适用 .NET 使用HttpRequest的Post上传文件,服务端的Web API接收Post上传上来的文件 代码
//调用的示例
private string fileName = "InStorageData.csv";
string filePath = parentPath + CommonHelper.UPLOAD + "\\" + fileName;//文件的全路径含文件名称及扩展名
string strResult = CommonHelper.SendFile(filePath, new Uri(CommonHelper.strURL + "PostFormData/" + fileName)); /// <summary>
/// 上传文件至服务器
/// </summary>
/// <param name="fileName"></param>
/// <param name="uri"></param>
public static string SendFile(string fileName, Uri uri)
{
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(uri);
httpReq.Credentials = CredentialCache.DefaultCredentials;
httpReq.Timeout = 60000;
httpReq.Headers.Add("cookie", string.Format("user=rainier-soft.com;fileName={0};warehouseId={1}", Path.GetFileName(fileName), CommonHelper.WarehouseId));
string strHtml=string.Empty;
//httpReq.MaximumAutomaticRedirections = 4;
//httpReq.MaximumResponseHeadersLength = 4; //时间戳 string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
httpReq.ContentType = "multipart/form-data; boundary=" + boundary;
httpReq.Method = "POST"; //设置对发送的数据不使用缓存 httpReq.AllowWriteStreamBuffering = false; // Build up the post message header
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"file\"; fileName=\"");
sb.Append(Path.GetFileName(fileName));
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: application/octet-stream;charset=gb2312");
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 appears on a line by itself
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); FileStream fileStream=null;
if (File.Exists(fileName))
fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
else
return "NOT"; httpReq.ContentLength = fileStream.Length + (long)postHeaderBytes.Length + (long)boundaryBytes.Length;//Important
// Write out the trailing boundary try
{
Stream requestStream = httpReq.GetRequestStream(); requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
requestStream.Write(buffer, 0, bytesRead);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); requestStream.Flush();//Important
requestStream.Close();
requestStream.Dispose();
fileStream.Flush();
fileStream.Close();
fileStream.Dispose(); HttpWebResponse httpWebResponse = (HttpWebResponse)httpReq.GetResponse();
string cookie = httpWebResponse.Headers.Get("Set-Cookie");
string contentType = httpWebResponse.ContentType;
Stream dataStream = httpWebResponse.GetResponseStream();
StreamReader reader = new StreamReader(dataStream, Encoding.UTF8);
strHtml = reader.ReadToEnd();
reader.Close();
reader.Dispose();
dataStream.Close();
dataStream.Dispose();
httpWebResponse.Close();
httpWebResponse.Close();
System.GC.Collect();
}
catch (Exception ex)
{
strHtml = "NO";
} return strHtml;
} /// <summary>
/// Post上传文件
/// </summary>
/// <returns></returns>
[HttpPost]
public string PostFormData()
{
string postJson;
string filesName = string.Empty;
string pathFile;
if (!Request.Content.IsMimeMultipartContent("form-data"))
{
return new HttpResponseException(HttpStatusCode.UnsupportedMediaType).Message;
} /*****获取POST上来的文件流****/
Stream streams = HttpContext.Current.Request.InputStream; //获取全部
HttpPostedFile file = HttpContext.Current.Request.Files[0];
Stream stream = file.InputStream;
var buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
stream.Close();
stream.Dispose();
/*****获取POST上来的文件流****/ try
{
/********从Cookies中获取文件名称******/
int loop1;
HttpCookieCollection myCookieCollection = HttpContext.Current.Request.Cookies;
for (loop1 = 0; loop1 < myCookieCollection.Count; loop1++)
{
if (myCookieCollection.GetKey(loop1) == "fileName")
{
filesName = myCookieCollection[loop1].Value;
myCookieCollection.Set(myCookieCollection[loop1]);
break;
}
}
/*******从Cookies中获取文件名称*******/ /********把POST上传的文件保存到服务端的文件夹下********/
string fileDire = HttpContext.Current.Server.MapPath("~/UpLoad/");
//如果不存在就创建文件夹 if (Directory.Exists(fileDire) == false)
{
Directory.CreateDirectory(fileDire);
}
//打开文件
pathFile = fileDire + filesName;
if (File.Exists(pathFile))
{
File.Delete(pathFile);
GC.Collect();
}
var fstream = new FileStream(pathFile, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
fstream.Write(buffer, 0, buffer.Length); //写二进制数组到文件 fstream.Close(); //关闭文件
fstream.Dispose(); //释放资源
GC.Collect();
postJson = Request.CreateResponse(HttpStatusCode.OK).ToString();
postJson = HttpStatusCode.OK.ToString();
/********把POST上传的文件保存到服务端的文件夹下********/
//Todo: 更新上传的文件到服务端 }
catch (Exception ex)
{
return new HttpResponseException(HttpStatusCode.HttpVersionNotSupported).Message;
}
return postJson;
}
Wince 6.0适用 .NET 使用HttpRequest的Post上传文件,服务端的Web API接收Post上传上来的文件 代码的更多相关文章
- GrapeCity Documents (服务端文档API组件) V3.0 正式发布
近日,葡萄城GrapeCity Documents(服务端文档API组件)V3.0 正式发布! 该版本针对 Excel 文档.PDF 文档和 Word 文档的 API 全面更新,加入了用于生成 Exc ...
- 【笔记7-部署发布】从0开始 独立完成企业级Java电商网站开发(服务端)
阿里云服务 购买 连接 购买域名 域名备案 域名解析 源配置步骤 资源地址 http://learning.happymmall.com/ 配置阿里云的yum源 1.备份 mv /etc/yum.re ...
- 【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)
支付模块 实际开发工作中经常会遇见如下场景,一个支付模块,一个订单模块,有一定依赖,一个同事负责支付模块,另一个同事负责订单模块,但是开发支付模块的时候要依赖订单模块的相关类 ,方法,或者工具类,这些 ...
- 【笔记4-商品模块】从0开始 独立完成企业级Java电商网站开发(服务端)
分类管理模块 数据表结构设计 分类表 CREATE TABLE.mmall_ category' ( 'id' int(11) NOT NULL AUTO_ INCREMENT COMMENT ' 类 ...
- 【笔记8-Redis分布式锁】从0开始 独立完成企业级Java电商网站开发(服务端)
Redis分布式锁 Redis分布式锁命令 setnx当且仅当 key 不存在.若给定的 key 已经存在,则 setnx不做任何动作.setnx 是『set if not exists』(如果不存在 ...
- 【笔记5-购物车及地址模块】从0开始 独立完成企业级Java电商网站开发(服务端)
购物车模块 数据库表设计 购物车表 CREATE TABLE mmall_ cart ( 'id' int(11) NOT NULL AUTO_ INCREMENT, 'user_ id' int(1 ...
- 【笔记3-用户模块】从0开始 独立完成企业级Java电商网站开发(服务端)
数据表结构设计 关系设计 为什么不用外键? 分库分表有外键会非常麻烦,清洗数据也很麻烦.数据库内置触发器也不适合采用. 查业务问题的后悔药--时间戳 create_time 数据创建时间 update ...
- 【笔记2-环境配置及初始化】从0开始 独立完成企业级Java电商网站开发(服务端)
准备工作 Linux系统安装 云服务器部署 概要 申请和配置 域名的购买.解析.配置.绑定流程 用户创建实操 环境安装及部署 JDK.Tomcat.Maven下载安装及配置 vsftpd下载安装及配置 ...
- 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API
原文:返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API [索引页][源码下载] 返璞归真 asp.net mvc (10) - asp.net ...
随机推荐
- 【学】AngularJS日记(2)
数组循环放到新生成的li中 <ul ng-init="arr=[12,5,6,394,344]"> <li ng-repeat="item in arr ...
- 用Python向MySQL数据库插入数据
最近一直在学习MySQL数据库,很感兴趣.这次我做了一个简单的尝试,使用Python3.4与MySQL数据库进行交互,将一份从雪球网上下载的某股票数据上传至MySQL数据库.仅为初学者提供参考,高手请 ...
- Dialog_ _dialog系统样式讲解 及 透明背景
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this,AlertDialog.THEME_TRADITIO ...
- java和h5 canvas德州扑克开发中(二)
德州扑克网页源码在github上分享 https://github.com/lxr1907/pokers 感兴趣的可以上去看下. 1.通讯使用websocket,主要在message.js中. 2.用 ...
- LinkedList
- DELL PowerEdge 2950更换告警硬盘
硬盘为SAS300G15K,四块,3#告警,打算还掉,在R900上找到一块对应的硬盘直接换下. 进入控制台后发现硬盘阵列里还是只有三块硬盘,物理磁盘倒是有四块,新插上的一块状态为“外部”,其他状态是“ ...
- Visual Studio 2012 trial version
Update: vs2012.5.iso http://download.microsoft.com/download/9/F/1/9F1DEA0F-97CC-4CC4-9B4D-0DB45B8261 ...
- 如何在IDEA上创建Spring MVC项目
对于刚刚从eclipse.myeclipse转到IDEA工具,在搭建项目遇到了一些问题,所以让我来分享我的搭建过程. 建议大家准备java环境.IDEA工具.tomcat.maven了,还有我是win ...
- 低版本的xcode打开xcode8上的xib错误
XIB和Storeboard适配 在Xcode8之前,创建一个XIB或SB文件,都是一个600*600的方块XIB文件.在Xcode8之后,创建的XIB文件默认是6s尺寸的大小. 但是Xcode8打开 ...
- WCF ajax跨域配置
webconfig必须配置 binding="webHttpBinding" <service name="Hezi.MsgService.Send"&g ...