HTTP请求中的Body构建——.NET客户端调用JAVA服务进行文件上传
/// <summary>
/// 上传文件操作
/// </summary>
/// <param name="fileStream"> 文件流</param>
/// <param name="url"> 上传地址</param>
/// <param name="fileName"> 文件名</param>
/// <param name="contenttype"> 上下文类型 </param>
/// <returns> 返回值</returns>
private Dictionary <string, string> UploadFileEx(Stream fileStream, string url, string fileName, string contenttype)
{
Dictionary<string , string> result = new Dictionary <string, string>(); if ((contenttype == null ) || (contenttype.Length == ))
{
contenttype = "application/octet-stream" ;
} Uri uri = new Uri(url);
string boundary = "----" + DateTime.Now.Ticks.ToString( "x");
HttpWebRequest webrequest = (HttpWebRequest )WebRequest.Create(uri);
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
webrequest.Method = "POST"; // 构建POST消息头,除文件之外的键值对都需要赋值
StringBuilder sb = new StringBuilder();
sb.AppendFormat( "--{0}", boundary);
sb.AppendLine( string.Empty);
sb.Append( "Content-Disposition: form-data; name=\"uptype\";" );
sb.AppendLine( string.Empty);
sb.AppendLine( string.Empty);
sb.Append( "clbuss");
sb.AppendLine( string.Empty); sb.AppendFormat( "--{0}", boundary);
sb.AppendLine( string.Empty);
sb.Append( "Content-Disposition: form-data; name=\"fileName\";" );
sb.AppendLine( string.Empty);
sb.AppendLine( string.Empty);
sb.Append(fileName);
sb.AppendLine( string.Empty); sb.AppendFormat( "--{0}", boundary);
sb.AppendLine( string.Empty);
sb.AppendFormat( "Content-Disposition: form-data; name=\"file\"; filename=\"{0}\"" , fileName);
sb.AppendLine( string.Empty);
sb.AppendFormat( "Content-Type: {0}", contenttype);
sb.AppendLine( string.Empty);
sb.AppendLine( string.Empty); string postHeader = sb.ToString();
byte[] postHeaderBytes = Encoding .UTF8.GetBytes(postHeader); // 构建POST消息尾
StringBuilder endSb = new StringBuilder();
endSb.AppendLine( string.Empty);
endSb.AppendFormat( "--{0}", boundary);
byte[] boundaryBytes = Encoding .UTF8.GetBytes(endSb.ToString());
long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length;
webrequest.ContentLength = length;
Stream requestStream = webrequest.GetRequestStream(); // 写入消息头
requestStream.Write(postHeaderBytes, , postHeaderBytes.Length); // 写入文件内容
byte[] buffer = new byte[checked(( uint)Math .Min(, (int)fileStream.Length))];
int bytesRead = ; while ((bytesRead = fileStream.Read(buffer, , buffer.Length)) != )
{
requestStream.Write(buffer, , bytesRead);
} // 写入消息尾
requestStream.Write(boundaryBytes, , boundaryBytes.Length);
WebResponse responce = webrequest.GetResponse();
Stream s = responce.GetResponseStream();
StreamReader sr = new StreamReader(s);
string resStr = sr.ReadToEnd();
Dictionary<string , object> resDic = JsonConvert.DeserializeObject<Dictionary <string, object>>(resStr);
if (resDic["code" ].ToString() == "")
{
Dictionary<string , string> resDetail = JsonConvert.DeserializeObject<Dictionary <string, string>>(resDic["content" ].ToString());
if (resDetail["code" ] == "")
{
result.Add( "issucess", "" );
result.Add( "address", BaseSysParamCache .GetSysParam("ShareUploadImgUrl") + resDetail["path" ]);
}
else
{
result.Add( "issucess", "" );
result.Add( "msg", resDetail["msg" ]);
}
}
else
{
result.Add( "issucess", "" );
result.Add( "msg", resDic["message" ].ToString());
} return result;
}
HTTP请求中的Body构建——.NET客户端调用JAVA服务进行文件上传的更多相关文章
- Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...
- Ftp客户端需要TSL功能的文件上传
Ftp客户端需要TSL功能 1.由于最近做了一个项目,需要把打包的文件传输到对方的FTP服务器上,但是用普通的java连接ftp客户端总是连接不上去,对方却说ftp客户端需要开通TSL功能. 直接上代 ...
- HTTP POST请求报文格式分析与Java实现文件上传
时间 2014-12-11 12:41:43 CSDN博客 原文 http://blog.csdn.net/bboyfeiyu/article/details/41863951 主题 HTTPHt ...
- Java中实现文件上传下载的三种解决方案
第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...
- 构建web应用之——文件上传
我们通过使用multipart请求数据接收和处理二进制信息(如文件).DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中的multi ...
- springmvc中使用文件上传功能
项目代码:https://github.com/PeiranZhang/springmvc-fileupload Servlet3.0之前使用文件上传功能 Servlet3.0之前需要使用common ...
- CI中的文件上传
//首先在控制器中装载url类和view视图: //在view视图中创建一个表单,注:在做文件上传一定要写encype=“multipart/form-data”: //form表单的提交页面应该使用 ...
- 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务
在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...
- [Asp.net]通过uploadify将文件上传到B服务器的共享文件夹中
写在前面 客户有这样的一个需求,针对项目中文档共享的模块,客户提出如果用户上传特别的大,或者时间久了硬盘空间就会吃满,能不能将这些文件上传到其他的服务器?然后就稍微研究了下这方面的东西,上传到网络中的 ...
随机推荐
- Python: 无参数的函数装饰器
写带参数的函数装饰器最纠结的是需要包好多层,最外层是接收参数的函数,它返回一个接收函数的的函数.但这样有个问题是,最终包装出来的装饰器必须加()调用一下,即使没有参数也需要这样做,因为调用这个最外层函 ...
- Android xml 格式 随笔
打包的时候Android xml文件会由字符格式(utf-8编码)转换为二进制格式.具体如:http://blog.csdn.net/jiangwei0910410003/article/detail ...
- 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包。
最近在升级 Visual Studio 2015 Update 3 的过程中,等了很长时间都没一点进展,于是就强行终止了升级程序,但VS也因此出了问题. 后来经过修复,不行,卸载再重装,仍然提示这个错 ...
- java&postgresql时区总结
介绍这篇文章之前,首先回答一个问题,以前都没有时区的概念,程序也写的好好的,为什么要计算时区哪?举个例子,比如有一个订单的时间是:2015-07-04 11:28:19,那么咋一看没什么问题,可是如果 ...
- Oracle的model语句入门-转
Model语句是Oracle 10g的新功能之一. 本文通过一些简单的例子帮助理解Model语句的用法,复杂使用场景请参考其他文章. 环境:当然需要Oracle 10g以上,本人是在11g上测试的. ...
- 最近一直在搞CAE,发现Eplan p8真的好强大。
最近一直在搞CAE,发现Eplan p8真的好强大. 标准化的意义在与提高工作效率,减少重复. 标准化后,不容易出错,项目更改容易.事件都能及时跟踪.
- 关于织梦系统不支持php中GD库的问题
大多数人在显成的PHP的CMS时,如织梦CMS,安装的时候不支持GD库,就导致整个网站的验证码不显示,以下是个人对此类问题的解决办法: 1.首先找到wamp的安装目录,找到PHP的文件夹,打开php. ...
- sublime3+wamp配置php,(无需配环境变量)
思来想去,最后还是决定给自己的手游加简单后端验证.好久没搞php了,最近搜了搜资料,发现现在php比几年前方便简单的多,有wampserver和sublime用.想想当年我还用记事本+phnow呢. ...
- java.lang.NullPointerException
你妹的这是什么错误啊? Errors occurred during the build. Errors running builder 'Android Resource Manager' on p ...
- Windows 10 Weather App无法正常显示解决方法
Weather动态磁贴显示Washington(不知是否和我的region设置有关系),打开应用却停留在输入需要搜索的天气.根据提示输入"Shanghai, China"并单击搜索 ...