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 ...
随机推荐
- SQL Server的高级知识
DataSet的内容介绍,两种单例模式(并发量的考虑),SQL高级中的case语句.连接操作.子查询.派生表 -------------------------------- 1.Case的用法 使用 ...
- 转,SelectNodes + XPath
XPath 是 XML 的内容,这里 SelectNodes 是 C# 中 XmlDocument 或 XmlNode 的一个方法.SelectNodes 使用 XPath 来选取节点. 重要语法 S ...
- 用ADO.NET存入数据库
点击按钮存入登录名和密码: const string connstr = @"data source=USER-20160705UW\JSQL;initial catalog=Test;in ...
- javascript函数中变量重名
<script type="text/javascript"> function fun(a){ console.log(a); // function var a=1 ...
- 使用Dapper读取Oracle多个结果集
Dapper对SQL Server支持很好,但对于Oracle有些用法不一样,需要自己进行特殊处理. 1.首先要自定义一个Oracle参数类 public class OracleDynamicPar ...
- python Queue模块
先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...
- [DFNews] Elcomsoft 发布EPPB 2.00.233
Elcomsoft Phone Password Breaker 是俄罗斯Elcomsoft公司推出的手机取证工具,能够针对黑莓.苹果等手机的备份文件进行多种方式破解,支持远程获取iCloud数据. ...
- JNI中C调用Java方法
背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT v ...
- 【转】apache DateFormatUtils 与 DateUtils 的使用
在Apache Commons项目的Lang里面,有两个类:DateUtils和DateFormatUtils,专门用于处理时间日期转换.它们在 org.apache.commons.lang.tim ...
- C/C++二维数组分配内存
//C++方式 double **Q=new double*[row]; //初始化Q矩阵 for(int i=0;i<row;++i) Q[i]=new double[POS_NUM]( ...