c#上传大文件方法
2023-09-11 14:20:28 时间
客户端代码:
/// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <param name="address">文件上传到的服务器</param> /// <param name="fileNamePath">要上传的本地文件(全路径)</param> /// <param name="saveName">文件上传后的名称</param> /// <returns>服务器反馈信息</returns> private string Upload_Request(string address, string fileNamePath, string saveName) { // 要上传的文件 FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(fs); //时间戳 string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x"); byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n"); //请求头部信息 StringBuilder sb = new StringBuilder(); sb.Append("--"); sb.Append(strBoundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\""); sb.Append("file"); sb.Append("\"; filename=\""); sb.Append(saveName); sb.Append("\""); sb.Append("\r\n"); sb.Append("Content-Type: "); sb.Append("application/octet-stream"); sb.Append("\r\n"); sb.Append("\r\n"); string strPostHeader = sb.ToString(); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader); // 根据uri创建HttpWebRequest对象 HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(address)); httpReq.Method = "POST"; //对发送的数据不使用缓存【重要、关键】 httpReq.AllowWriteStreamBuffering = false; //设置获得响应的超时时间(300秒) //httpReq.Timeout = 300000; httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary; long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length; long fileLength = fs.Length; httpReq.ContentLength = length; try { //每次上传4k int bufferLength = 4096; byte[] buffer = new byte[bufferLength]; //已上传的字节数 long offset = 0; //开始上传时间 DateTime startTime = DateTime.Now; int size = r.Read(buffer, 0, bufferLength); Stream postStream = httpReq.GetRequestStream(); //发送请求头部消息 postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); while (size > 0) { postStream.Write(buffer, 0, size); offset += size; TimeSpan span = DateTime.Now - startTime; //1024*1024=1048576 size = r.Read(buffer, 0, bufferLength); } //添加尾部的时间戳 postStream.Write(boundaryBytes, 0, boundaryBytes.Length); postStream.Close(); //获取服务器端的响应 WebResponse webRespon = httpReq.GetResponse(); Stream s = webRespon.GetResponseStream(); StreamReader sr = new StreamReader(s); //读取服务器端返回的消息 string serverMsg = sr.ReadLine(); s.Close(); sr.Close(); } catch (Exception ex) { } finally { fs.Close(); r.Close(); } return ""; }
服务端:
HttpPostedFileBase file = Request.Files[0]; file.SaveAs(Server.MapPath("~/file/k.iso"));
客户端调用:
Upload_Request("http://localhost:7115/test/index", "d:\\t.rar", "kk");
相关文章
- 辛巴学院-Unity-剑英陪你零基础学c#系列(一)Hello World
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
- 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件
- C# websocket与html js实现文件发送与接收处理
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- Word处理控件Aspose.Words功能演示:在 C# 中将 Word DOC DOCX 转换为 Markdown
- C# (江湖小新)- IO流&文件管理(读写文件就用它了)
- C#学习记录——Visual Studio为项目添加DLL文件引用
- C#,格式化json数据的源代码
- c# Bitmap byte[] Stream 文件相互转换
- c# 多线程 调用带参数函数
- C# 的TCPClient异步连接与异步读数据
- C# 关于 上传文件 大小限制问题
- 一个java的DES加密解密类转换成C#
- C# 使用xsd文件验证XML 格式是否正确
- C#删除文件和文件夹到回收站
- C# WinForm 慎用 override CreateParams 来重载窗体的一些特性
- C#根据当前时间获取,本周,本月,本季度等时间段
- C# 请求数据 模拟多文件上传
- c#类的定义,c#中的关健字,C#标识符
- C#与.NET Framework c#编程语言,和java是一样的。(c#,java) -->javaweb,asp.net