架构师_程序员

查看: 6427|回复: 19

[WinForm] HttpWebRequest上传文件客户端和服务端(支持2G以内)Demo

[复制链接]
发表于 2016-12-16 10:00:34 | 显示全部楼层
QQ截图20161216095447.jpg IIS配置1.png IIS配置2.png 截图1.png 截图2.png

说明:

添加处理程序脚本映射(不然500报错)-->
------------------------------------原来的-------------------------------------------
*.ashx
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
SimpleHandlerFactory-ISAPI-2.0

*.ashx
%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll
SimpleHandlerFactory-ISAPI-2.0-64
------------------------------------新添加-------------------------------------------
*.ashx
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll
SimpleHandlerFactory-ISAPI-4.0

*.ashx
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll
SimpleHandlerFactory-ISAPI-4.0-64

谓词:
GET,HEAD,POST,DEBUG


HttpWebRequest上传文件,demo里面既有客户端也有服务端的源码

  1. public void UploadThread()
  2.         {
  3.             string result = string.Empty;
  4.             FileStream fs = File.OpenRead(txtFileUrl.Text.Trim());
  5.             HttpWebRequest request = null;
  6.             HttpWebResponse response = null;
  7.             Stream requestStream = null;
  8.             Stream responseStream = null;

  9.             try
  10.             {
  11.                 long fileLength = fs.Length;
  12.                 long seekPosition = 0;
  13.                 long endPosition = fileLength;

  14.                 request = (HttpWebRequest)HttpWebRequest.Create(ServerUrl);
  15.                 request.Timeout = -1;
  16.                 CookieContainer cookieContainer = new CookieContainer();
  17.                 request.CookieContainer = cookieContainer;
  18.                 request.AllowAutoRedirect = true;
  19.                 request.Method = "POST";
  20.                 //对发送的数据不使用缓存【重要、关键】
  21.                 request.AllowWriteStreamBuffering = false;
  22.                 request.SendChunked = true;//支持分块上传
  23.                 string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
  24.                 request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
  25.                 byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
  26.                 byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
  27.                 string fileName = System.IO.Path.GetFileName(FileUrl);

  28.                 //请求头部信息
  29.                 StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name="file";filename="{0}"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
  30.                 byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());

  31.                 request.AddRange((int)seekPosition);
  32.                 requestStream = request.GetRequestStream();

  33.                 byte[] buffer = new byte[partLength];
  34.                 fs.Seek(seekPosition, SeekOrigin.Begin);

  35.                 requestStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
  36.                 requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

  37.                 int readLength = fs.Read(buffer, 0, buffer.Length);
  38.                 this.pbProgress.BeginInvoke(new Action(() => {
  39.                     pbProgress.Value = 0;
  40.                     pbProgress.Minimum = 0;
  41.                     pbProgress.Maximum = (int)fs.Length;
  42.                 }));
  43.                 while (seekPosition < endPosition && readLength > 0)
  44.                 {
  45.                     requestStream.Write(buffer, 0, readLength);
  46.                     requestStream.Flush();
  47.                     seekPosition += readLength;
  48.                     readLength = fs.Read(buffer, 0, buffer.Length);
  49.                     //更新进度条
  50.                     this.pbProgress.BeginInvoke(new Action(() => {
  51.                         pbProgress.Value = (int)seekPosition;
  52.                     }));
  53.                 }
  54.                 requestStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
  55.                 this.pbProgress.BeginInvoke(new Action(() => {
  56.                     lblTips.Text = "保存文件中...";
  57.                 }));
  58.                 response = (HttpWebResponse)request.GetResponse();
  59.                 responseStream = response.GetResponseStream();
  60.                 StreamReader streamReader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
  61.                 result = streamReader.ReadToEnd();//返回信息
  62.                 this.pbProgress.BeginInvoke(new Action(() => {
  63.                     lblTips.Text = "保存完毕...";
  64.                 }));
  65.                 streamReader.Close();
  66.                 Dispose(fs, request, response, requestStream, responseStream);
  67.             }
  68.             catch (Exception ex)
  69.             {
  70.                 FrmMessagebox.Show("上传失败:\r\n" + ex.Message);
  71.                 return;
  72.             }
  73.             finally
  74.             {
  75.                 Dispose(fs, request, response, requestStream, responseStream);
  76.             }
  77.             string[] arrResult = result.Split(',');
  78.             string flag = arrResult[0];
  79.             string message = arrResult[1];
  80.             if(flag == "0")
  81.             {
  82.                 FrmMessagebox.Show("上传失败:\r\n" + message);  
  83.             }
  84.             if (flag == "1")
  85.             {
  86.                 FrmMessagebox.Show("上传成功:\r\n" + message);
  87.             }
  88.         }
复制代码



demo源码下载:

游客,如果您要查看本帖隐藏内容请回复





上一篇:wifi万能钥匙接口wifi密码查询
下一篇:c# XML 序列化 反序列化
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-3-7 16:22:42 | 显示全部楼层
希望这个论坛不让我失望,最终还是让我很失望
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-7-16 13:44:37 | 显示全部楼层

感谢楼主分享,真心不多,学习学习!
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-3-4 09:17:39 | 显示全部楼层
感谢楼主分享,真心不多,学习学习!
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-5-11 14:07:11 | 显示全部楼层
谢谢谢谢谢谢谢谢
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2018-2-21 20:12:09 | 显示全部楼层
感觉很有用,求下载。。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-1-30 15:06:08 | 显示全部楼层

感觉很有用,求下载。。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-4-12 16:23:33 | 显示全部楼层
很有用,谢谢
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-5-31 17:42:57 | 显示全部楼层
1234567890
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-6-3 10:31:21 | 显示全部楼层

感觉很有用,求下载。。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-6-3 10:48:14 | 显示全部楼层
下来试一下,别让我失望。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-7-2 13:39:52 | 显示全部楼层
12345611111111111111

评分

参与人数 1MB -1 贡献 -1 收起 理由
QWERTYU -1 -1 请勿灌水,提高回帖质量是每位会员应尽的义.

查看全部评分

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

本版积分规则

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

Mail To:help@itsvse.com

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

GMT+8, 2020-10-28 22:06

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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