C# Post请求参数添加文件

该代码示例展示了如何在C#中进行POST请求以上传文件,通过HttpWebRequest类,使用multipart/form-data格式构造请求体,包括文件内容和相关参数。如果上传失败,信息将被记录到指定的文本文件中。
摘要由CSDN通过智能技术生成

C# Post请求参数添加文件

		public static string PostFile(string url, string fileName, string itemId)
		{
            try
            {
				//验证文件是否存在
				if (File.Exists(fileName) == false)
				{
					string text = fileName + ":" + "不存在" + "\r\n";
					File.AppendAllText(@"E:\同步上传\上传失败.txt", text);
					return "";
				}
				else 
				{
					FileInfo file = new FileInfo(fileName);
					string boundary = "fc";//分隔符
					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=\"file\";filename=\"" + file.Name + "\";name=\"bizCode\";name=\"fc\";")
						.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();
					var res = JsonConvert.DeserializeObject<dynamic>(result);
					if (res.code != 200)
					{
						string text = itemId + ":" + fileName + "\r\n";
						File.AppendAllText(@"E:\同步上传\上传失败.txt", text);
						log4netHelper.WriteError($"同步上传调用接口{url}出错," + "code异常:" + res.code + ",msg:" + res.msg);
					}
					sr.Close();
					resp.Close();
					return res.data.filePath;
				}
			}
            catch (Exception ex)
            {
				File.AppendAllText(@"E:\同步上传\上传失败.txt", ex.ToString());
				log4netHelper.WriteError($"同步上传调用接口{url}异常:" + ex.ToString());
			}
			return "";
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值