当前位置: 首页 > news >正文

C# Post请求上传文件_C#Post请求带文件

一、Http Post请求附带文件的请求报文格式

boundary=xxxx 文件分隔符,可以自己定义

------xxxxx 文件分割开始

------xxxxx-- 文件分割结束。

Header内容:


Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468 
Content-Length: 220 

content内容:

---------------------------acebdf13572468 
Content-Disposition: form-data; name="media";filename="wework.txt"; filelength=6 
Content-Type: application/octet-stream 

mytext (文件的二进制字符串)
---------------------------acebdf13572468--

二、C# Post 发送文件代码示例

       /// <summary>
        /// Post 请求发送文件
        /// </summary>
        /// <param name="url"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static string PostFile(string url, string fileName)
        {
            //验证文件是否存在
            if (File.Exists(fileName) == false)
                throw new Exception("发送文件不存在!");
            FileInfo file = new FileInfo(fileName);
            string boundary = "qianle";//分隔符
            HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;

            //构造请求体
            byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
            byte[] byteEnd = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); //结束标识 --xxxx--
            StringBuilder strContent = new StringBuilder();
            strContent
                .Append("Content-Disposition:form-data;name=\"filename\";filename=\"" + file.Name + "\"")
                .AppendLine()
                .Append("Content-Type:application/octet-stream")
                .AppendLine()
                .AppendLine(); //特别说明,Content-Disposition 前边不能添加换行符号
            byte[] byteContent = Encoding.UTF8.GetBytes(strContent.ToString());
            byte[] byteFile = File.ReadAllBytes(fileName);

            //执行发送
            req.Method = "POST";
            req.ContentType = $"multipart/form-data;charset=utf-8;boundary={boundary}";
            req.UserAgent = UserAgent;
            req.ContinueTimeout = 20000;

            var reqStrem = req.GetRequestStream();
            reqStrem.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length); //文件开始
            reqStrem.Write(byteContent, 0, byteContent.Length);//文件信息
            reqStrem.Write(byteFile, 0, byteFile.Length);//文件内容
            reqStrem.Write(byteEnd, 0, byteEnd.Length); //文件结束
            reqStrem.Close();

            WebResponse resp = req.GetResponse();
            StreamReader sr = new StreamReader(resp.GetResponseStream());
            string result = sr.ReadToEnd();
            sr.Close();
            resp.Close();
            return result;
        }

多文件上传参考:

c# WebApi POST请求同时包含数据及其文件_最数据的博客-CSDN博客

三、C# 服务器端接受 form提交的文件:

C# HTML Form表单文件上传处理

更多:

C# HTML Form表单文件上传处理

C# 发送Post请求(带参数)

C#发送Get请求(带参数)

相关文章:

  • Flutter:文本组件
  • ANSYS2021安装过程问题总结
  • 洛谷 P3119【分层图】【tarjan】
  • Reggie外卖项目 —— 项目开发整体介绍
  • git -- 回退版本(两个版本之间来回切)
  • Non-nullable instance field must be initialized
  • C++中的struct和class基本没啥区别,唯一的区别如下
  • 【考研线代】五. 特征值和特征向量
  • 申请免费域名 + SSL 证书的方法
  • java基于ssm+vue+elementui的宠物用品商城管理系统 毕设
  • 从Z世代消费需求洞察文旅新业态
  • 华为方舟编译器开源项目编译第二弹
  • Excel 数据随机分组
  • 9.2DDD之领域事件
  • 微信公众号 Markdown 编辑器
  • 分享的文章《人生如棋》
  • Apache的80端口被占用以及访问时报错403
  • ES学习笔记(12)--Symbol
  • IDEA 插件开发入门教程
  • Java的Interrupt与线程中断
  • JAVA多线程机制解析-volatilesynchronized
  • log4j2输出到kafka
  • node和express搭建代理服务器(源码)
  • PHP 7 修改了什么呢 -- 2
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • 包装类对象
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 聊聊sentinel的DegradeSlot
  • 每天一个设计模式之命令模式
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 算法之不定期更新(一)(2018-04-12)
  • 新手搭建网站的主要流程
  • 赢得Docker挑战最佳实践
  • 走向全栈之MongoDB的使用
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • zabbix3.2监控linux磁盘IO
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • #define与typedef区别
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #每天一道面试题# 什么是MySQL的回表查询
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (二)linux使用docker容器运行mysql
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十八)三元表达式和列表解析
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net 微服务 服务保护 自动重试 Polly
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • /proc/interrupts 和 /proc/stat 查看中断的情况