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服务器的共享文件夹中
写在前面 客户有这样的一个需求,针对项目中文档共享的模块,客户提出如果用户上传特别的大,或者时间久了硬盘空间就会吃满,能不能将这些文件上传到其他的服务器?然后就稍微研究了下这方面的东西,上传到网络中的 ...
随机推荐
- Hadoop - Azkaban 作业调度
1.概述 在调度 Hadoop 的相关作业时,有以下几种方式: 基于 Linux 系统级别的 Crontab. Java 应用级别的 Quartz. 第三方的调度系统. 自行开发 Hadoop 应用调 ...
- exerunexplorer.exe
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- Office 2013 Excel 转换 Word
最新文章:Virson's Blog 参考文章:百度百科 1.使用Excel打开需要转换的Excel文档: 2.采用另存为*.htm的方式将该Excel文档另存为网页,如下图: 3.找到保存的htm网 ...
- [论文笔记] Methodologies for Data Quality Assessment and Improvement (ACM Comput.Surv, 2009) (2)
本篇博文主要对DMQ(S3.7)的分类进行了研读. 1. 这个章节提出了一种DQM的分类法(如下图) 由上图可见,该分类法的分类标准是对assessment & improvement阶段的支 ...
- c2ph
http://bolenot.ru/library/cmd/blcmdl1_c2ph.htm?-c2ph---Linux%E5%91%BD%E4%BB%A4--UNIX%E5%91%BD%E4%BB% ...
- python load mat 并按变量名赋值
import numpy as np import scipy.io as io creat = locals() tmp = io.loadmat("all.mat") for ...
- c++ 访问者模式(visitor pattern)
概述: 我们去银行柜台办业务,一般情况下会开几个个人业务柜台的,你去其中任何一个柜台办理都是可以的.我们的访问者模式可以很好付诸在这个场景中:对于银行柜 台来说,他们是不用变化的,就是说今天和明天提供 ...
- zeromq 测试总结
总结 测试项目 github (https://github.com/solq360/jmzq) 非常不稳定 pub/sub 模式 30W压测丢了27W条消息,官方没有给出任何的发送状态供业务层处理 ...
- 分享一个Mongodb PHP封装类
<?php /** * Mongodb 基本操作API,支持基本类似关系统型数据库的操作接口 * * @version 1.0 * [说明] * * 1:该版本API实现了 Mongodb 中最 ...
- JS中style属性
解决办法:1.先定义一个CSS规则,然后this.className=''2.document.getElementByIdx_x("a").style.cssText=" ...