ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# .Net Core 在后台Post单个文件调用接口的方法

2022-01-13 11:03:45  阅读:260  来源: 互联网

标签:Core fs END string C# PREFIX boundary Net LINE


 1         /// <summary>
 2         /// Post单个文件
 3         /// </summary>
 4         /// <typeparam name="T">返回结果</typeparam>
 5         /// <param name="url">提交地址</param>
 6         /// <param name="fieldName">参数名称</param>
 7         /// <param name="file">文件信息</param>
 8         /// <returns></returns>
 9         public static T PostSingleFile<T>(string url ,string fieldName, PostFileItem file)
10         {
11             Stream fs = file.FileStream;
12             if (!fs.CanRead)
13             {
14                 return default;
15             }
16             byte[] buffer = new byte[fs.Length];
17             fs.Read(buffer, 0, (int)fs.Length);
18             fs.Close();
19 
20             string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
21             string PREFIX = "--", LINE_END = "\r\n";
22 
23             StringBuilder sb = new StringBuilder();
24             sb.Append(PREFIX + boundary + LINE_END);
25             sb.Append("Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + file.FileName + "\"" + LINE_END);
26             sb.Append("Content-Type: " + file.ContentType + LINE_END + LINE_END);
27             WebRequest request = WebRequest.Create(url);
28             request.Method = "POST";
29             request.ContentType = "multipart/form-data;boundary=" + boundary;
30             Stream dataStream = request.GetRequestStream();
31             dataStream.Write(Encoding.UTF8.GetBytes(sb.ToString()), 0, Encoding.UTF8.GetByteCount(sb.ToString()));
32             dataStream.Write(buffer, 0, buffer.Length);
33             dataStream.Write(Encoding.UTF8.GetBytes(LINE_END + PREFIX + boundary + PREFIX + LINE_END), 0, Encoding.UTF8.GetByteCount(LINE_END + PREFIX + boundary + PREFIX + LINE_END));
34             dataStream.Close();
35 
36             WebResponse webResponse = request.GetResponse();
37             Stream newStream = webResponse.GetResponseStream();
38 
39             StreamReader rdr = new StreamReader(newStream);
40             var result = rdr.ReadToEnd();
41 
42             if (!string.IsNullOrEmpty(result))
43                 return JsonUtil.ConvertJsonToObject<T>(result);
44 
45             return default;
46         }

提交文件使用的工具类:

 1     /// <summary>
 2     /// 提交文件请求参数
 3     /// </summary>
 4     public class PostFileItem
 5     {
 6         /// <summary>
 7         /// 文件数据流
 8         /// </summary>
 9         public Stream FileStream { get; set; }
10         /// <summary>
11         /// 文件名称
12         /// </summary>
13         public string FileName { get; set; }
14         /// <summary>
15         /// 文件类别
16         /// </summary>
17         public string ContentType { get; set; }
18     }

 

标签:Core,fs,END,string,C#,PREFIX,boundary,Net,LINE
来源: https://www.cnblogs.com/SuperJason/p/15796683.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有