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 ...
随机推荐
- Stick hero "攻略", android 代码编写与分析(后台截屏, 后台模拟点击)
论文写完,感觉头脑好久没被灵感刺激了,前些天室友介绍了个小游戏,我突然来了灵感可以写的简单的android 程序实现自动运行.主要的过会为三步: 1,Android 屏幕的获取.因为安全的原因,过程比 ...
- oracle之sequence详解
Oracle提供了sequence对象,由系统提供自增长的序列号,每次取的时候它会自动增加,通常用于生成数据库数据记录的自增长主键或序号的地方. sequence的创建需要用户具有create seq ...
- 手机平板等移动端适配跳转URL的js代码
<script type="text/javascript"> if(/AppleWebKit.*mobile/i.test(navigator.userAgent) ...
- ajax的两种方式
get:var ajax=new XMLHttpRequest();ajax.open('get','__URL__/check_all?val='+check);ajax.send();ajax.o ...
- Win+R命令大全
explorer---------------------打开资源管理器logoff------------------------注销命令lusrmgr.msc----------------本机用 ...
- Win7系统安装好Axure点击运行报.NET Framework4.0未安装的解决办法
1:问题 由于工作需要,需要研究一下Axure原型设计软件的使用方式,在公司的电脑上成功安装了从同事那里拿来的Axure7.0软件,能够正确运行没有任何问题,在自己的电脑上安装的也非常顺利,不过运 ...
- java安全沙箱(四)之安全管理器及Java API
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
- web页面设计基本原则
1.对齐. 不对齐看起来糟糕极了.简直一片混乱,会给人一种很不专业的印象.对齐让页面更漂亮一些,更重要的是便于更好的传达信息. 2.去掉糟糕的边框.边框会产生一种分离感. 3.亲密性. 元素相互靠近看 ...
- fzu1342
http://acm.fzu.edu.cn/problem.php?pid=1342 dp[i][j] , i位尾巴为j的概率 const int maxn = 1008 ; double dp[m ...
- linux svn hooks代码自动更新至项目
由于开发移动端web,ui需要及时看到样式变化,所以通过svn hooks(钩子)来提交文件,然后再把文件同步到测试服务器项目目录,步骤如下: 1.进入 /home/svn/cmall/hooks ( ...