httpclient请求接口,上传文件附加参数(.net core)

复制代码
/// <summary>
        /// 上传文件 - 武汉站点
        /// </summary>
        [HttpPost]
        public IActionResult UploadWH(RequestFileModel model)
        {
            var extensionUpper = Path.GetExtension(model.File.FileName).ToUpper().TrimStart('.');
            // POST请求,转发数据
            using (var stream = model.File.OpenReadStream())
            {
                var fileType = FileExtension.GetFileType(stream);

                var flag = FileExtension.CheckExtention(extensionUpper, fileType);
                if (!flag)
                {
                    //throw new FileErrorException("请选择支持的文件格式");
                    return EvosErrorContentResult("errorFormat", $"请选择支持的文件格式", fileType, HttpStatusCode.BadRequest);
                }
                stream.Seek(0, SeekOrigin.Begin);

                var result = FileExtension.UploadFileWH(model, stream, _domainConfig.EvosFileSite);

                return Ok(JsonConvert.DeserializeObject<JObject>(result));
            }
        }
复制代码
复制代码

复制代码
/// <summary>
        /// /// <summary>
        /// 转发文件-武汉文件站点
        /// </summary>
        /// <param name="model"></param>
        /// <param name="stream"></param>
        /// <param name="fileSite"></param>
        /// <returns></returns>
        public static string UploadFileWH(RequestFileModel model, Stream stream, string fileSite)
        {
            ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

            string result = "";
            byte[] buffer = new byte[stream.Length];
            stream.Read(buffer, 0, buffer.Length);

            var handler = new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = delegate { return true; }
            };

            var webRequest = new HttpClient(handler);

            using (var multipartFormDataContent = new MultipartFormDataContent())
            {
                var values = new[]
                    {
                            new KeyValuePair<string, string>("id", model.Id??""),
                            new KeyValuePair<string, string>("refId", model.ReFld??""),
                            new KeyValuePair<string, string>("refType", model.RefType??""),
                             new KeyValuePair<string, string>("bventId", model.BventId??""),
                             new KeyValuePair<string, string>("remarks", model.Remarks??""),
                             new KeyValuePair<string, string>("useOriginName", model.UseOriginName.ToString())
                        };
                foreach (var keyValuePair in values)
                {
                    multipartFormDataContent.Add(new StringContent(keyValuePair.Value),
                        String.Format("\"{0}\"", keyValuePair.Key));
                }
                multipartFormDataContent.Add(new ByteArrayContent(buffer), "file", model.File.FileName);

                result = webRequest.PostAsync(fileSite, multipartFormDataContent).Result.Content.ReadAsStringAsync().Result;
            }

            return result;
        }
    }
复制代码

 

 
复制代码
复制代码
public class RequestFileModel
    {
        public IFormFile File { get; set; }
        // 如果传了文件id,则会更新文件内容,如果文件不存在会抛错
        public string Id { get; set; }
        // 选填,关联id,根据此字段可以查出业务关联的所有文件
        public string ReFld { get; set; }
        //:选填,关联类型,分类字段,用于标识文件的业务类型
        public string RefType { get; set; }
        //:选填,会议id
        public string BventId { get; set; }
        //:备注,选填
        public string Remarks { get; set; }
        //: 选填,上传文件是否使用原名称,默认是
        public bool UseOriginName { get; set; } = true;
    }
复制代码

 

posted @   月下之神  阅读(2607)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示