架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 295|回复: 0

[资料] C# Http请求 上传表单文件(可添加其他参数)

[复制链接]
跳转到指定楼层
楼主
发表于 2019-7-8 15:10:33
C#上传表单文件,可以添加其他参数,也是以流的形式添加进去,代码如下
  1.         //filePath为本地存在的路径,其他两个参数是接口需要的其他参数,统一卸载表单流中上传
  2.         public bool ProcessRequest(string filePath, string sjlj, string fileName)
  3.         {
  4.             //参考http://www.cnblogs.com/greenerycn/archive/2010/05/15/csharp_http_post.html  
  5.             // 边界符  
  6.             var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
  7.             var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
  8.             var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);

  9.             // 最后的结束符  
  10.             var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");

  11.             // 文件参数头  
  12.             const string filePartHeader =
  13.                 "Content-Disposition: form-data; name="{0}"; filename="{1}"\r\n" +
  14.                 "Content-Type: application/octet-stream\r\n\r\n";
  15.             var fileHeader = string.Format(filePartHeader, "file", fileName);
  16.             var fileHeaderBytes = Encoding.UTF8.GetBytes(fileHeader);

  17.             // 开始拼数据  
  18.             var memStream = new MemoryStream();
  19.             memStream.Write(beginBoundary, 0, beginBoundary.Length);

  20.             // 文件数据  
  21.             memStream.Write(fileHeaderBytes, 0, fileHeaderBytes.Length);
  22.             var buffer = new byte[1024];
  23.             int bytesRead; // =0  
  24.             while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
  25.             {
  26.                 memStream.Write(buffer, 0, bytesRead);
  27.             }
  28.             fileStream.Close();

  29.             //Key - Value数据
  30.             var stringKeyHeader = "\r\n--" + boundary +
  31.                                    "\r\nContent-Disposition: form-data; name="{0}"" +
  32.                                    "\r\n\r\n{1}\r\n";


  33.             //此处是接口所需的其他参数
  34.             Dictionary<string, string> stringDict = new Dictionary<string, string>();
  35.             stringDict.Add("reportPath", sjlj);
  36.             stringDict.Add("reportName", fileName);
  37.             foreach (byte[] formitembytes in from string key in stringDict.Keys
  38.                                              select string.Format(stringKeyHeader, key, stringDict[key])
  39.                                                  into formitem
  40.                                              select Encoding.UTF8.GetBytes(formitem))
  41.             {
  42.                 memStream.Write(formitembytes, 0, formitembytes.Length);
  43.             }

  44.             // 写入最后的结束边界符  
  45.             memStream.Write(endBoundary, 0, endBoundary.Length);

  46.             //倒腾到tempBuffer
  47.             memStream.Position = 0;
  48.             var tempBuffer = new byte[memStream.Length];
  49.             memStream.Read(tempBuffer, 0, tempBuffer.Length);
  50.             memStream.Close();
  51.             // 创建webRequest并设置属性  
  52.             var webRequest = (HttpWebRequest)WebRequest.Create(POST_UploadPdfFile);
  53.             webRequest.Method = "POST";
  54.             webRequest.Timeout = 100000;
  55.             webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
  56.             webRequest.ContentLength = tempBuffer.Length;
  57.             webRequest.KeepAlive = false;
  58.             webRequest.ProtocolVersion = HttpVersion.Version10;
  59.             webRequest.Headers.Add("Authorization", Header);
  60.             var requestStream = webRequest.GetRequestStream();
  61.             requestStream.Write(tempBuffer, 0, tempBuffer.Length);
  62.             requestStream.Close();

  63.             var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();
  64.             string responseContent;
  65.             var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
  66.             responseContent = httpStreamReader.ReadToEnd();
  67.             httpWebResponse.Close();
  68.             webRequest.Abort();

  69.             //接口返回值
  70.             if (responseContent.ToUpper().Equals("TRUE"))
  71.             {
  72.                 return true;
  73.             }
  74.             return false;
  75.         }



复制代码






上一篇:Hadoop- HDFS的API操作
下一篇:Table 'tablename' is marked as crashed and should be repaired
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2019-10-21 12:42

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表