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 ...
随机推荐
- modelsim操作流程
1.File->Change Directory2.File->New->Library 在弹出的对话框中选择 a new library and a logical mapping ...
- 修改Windows Server 2008+IIS 7+ASP.NET默认连接限制,支持海量并发连接数
WIN7中IIS7默认配置的服务器同时最多只能处理5000个请求,如果由于某些情况(程序问题等)造成同时请求超过5000时,将会导致服务器错误.为此,修改服务器的设置,从而支持10万个同时请求. 具体 ...
- UIScrollView 性能优化 - view转为Image
进入做地图闹钟app,图层关系是这样的: subwayView 上先绘制线路上各个元素:线条 ,站点名称-Label,站点位置(画圆圈表示)-View.shapeLayer UIBezierPath ...
- CORS 协议(跨域资源共享)
跨域问题 只要协议.域名.端口有任何一个不同,都被当作是不同的域. 为什么会有跨域的限制? 之前发生过的一些跨域安全事件: 新浪微博XSS受攻击事件 2011年6月28日晚,新浪微博出现了一次 ...
- Framework4.5语法糖 异步Task
1.线程安全 在使用TaskRun的时候需要注意线程安全的问题. 线程安全通常是由全局变量及静态变量引起的,如果是值类型就不存在这样的隐患,如果是引用类型用不好就会导致线程不安全! 2.Task.Ta ...
- OpenCV配置经历简述
关于OpenCV的配置过程在这里做一简述和记录. 配置的是OpenCV2.2.0,环境为VS2010. 首先在OpenCV官网(http://opencv.org/downloads.html)下载了 ...
- Redis 配置文件详解
# Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写)## 1k => 1000 bytes# 1kb => ...
- window.returnValue跨域传值问题[转]
主页面用window.showModalDialog的时候,如果直接打开其它系统的页面,这时候别人的页面在window.returnValue=1;这样返回值的时候,主页面是取不到返回值的,原因就是因 ...
- URL Regex expression
转载: http://blog.csdn.net/weasleyqi/article/details/7912647 首先,正则表达式: String check = @"((http|ft ...
- IntelliJ IDEA 使用说明(For Eclipse user)
IDEA和Eclipse主要在用户界面,编译方法和快捷键上有所差别. 1. 用户界面 1.1 No workspace IDEA 的Project相当于Eclipse的workspace,具体概念对比 ...