首页 > 其他分享 >使用httpclient实现后台通过接口上传文件

使用httpclient实现后台通过接口上传文件

时间:2023-10-12 10:35:01浏览次数:35  
标签:formDataContent apiModel 接口 ClientCode authResult var new 上传 httpclient

请求端:

   var upurl = Config.GetValue("fileupUrl");
   HttpPostedFile file = files[0];
   MemoryStream memoryStream = new MemoryStream();
   file.InputStream.CopyTo(memoryStream);
   byte[] fileBytes = memoryStream.ToArray();
   object sendScObj = new {  relaPath = virtualPath, fileName = fileName };
   ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
   ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
   var handler = new HttpClientHandler
   {
       ServerCertificateCustomValidationCallback = delegate { return true; }
   };
   using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(handler))//若想手动设置Cookie则必须设置UseCookies = false
   {
       var fileContent = new ByteArrayContent(fileBytes);
       fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
       {
           Name = "file",
           FileName = fileName
       };

       var formDataContent = new MultipartFormDataContent();
       formDataContent.Add(fileContent);
       formDataContent.Headers.Add("UserName", "");
       formDataContent.Headers.Add("PassWord", "");
       formDataContent.Headers.Add("SendPlatCode", "");
       var response = await client.PostAsync(upurl, formDataContent);
       response.EnsureSuccessStatusCode();
   }

接收端:

    [HttpPost]
    public async Task<object> syncReceStream()
    {
        #region 授权
        string AuthcodeID = "";
        var authResult = Authorization(out AuthcodeID);
        if (authResult.Code != ClientCode.Succeed)
        {
            return authResult;
        }
        var ips = Config.GetValue("yxIP");
        var bendiPath = Config.GetValue("BendiPath");
        if (string.IsNullOrEmpty(bendiPath) || string.IsNullOrEmpty(ips) || !ips.Contains(AuthcodeID))
        {
            authResult.Code = ClientCode.FindNull;
            authResult.ErrorMessage = "未找到网络";
            return authResult;
        }
        #endregion
        ApiResultModel apiModel = new ApiResultModel();
        try
        {
            //获取流
            var requestfile = System.Web.HttpContext.Current.Request.Files[0];
            if (requestfile != null && requestfile.ContentLength > 0)
            {
                var request = await Request.Content.ReadAsStringAsync();
                if (string.IsNullOrEmpty(request))
                {
                    apiModel.Code = ClientCode.FindNull;
                    apiModel.ErrorMessage = "未找到参数";
                    return apiModel;
                }
                var model = Util.Json.ToObject<AnnexInfoEntity>(request.ToString());
                var RoutePath = bendiPath + model.RelaPath;
                if (!System.IO.Directory.Exists(RoutePath))
                {
                    System.IO.Directory.CreateDirectory(RoutePath);
                }
                //本地文件夹
                requestfile.SaveAs(RoutePath);
                apiModel.Code = ClientCode.Succeed;
            }
            else
            {
                apiModel.Code = ClientCode.Exception;
                apiModel.ErrorMessage = "文件异常";
            }
        }
        catch (Exception ex)
        {
            apiModel.Code = ClientCode.Exception;
            apiModel.ErrorMessage = ex.Message;
        }
        return apiModel;
    }

 

 

标签:formDataContent,apiModel,接口,ClientCode,authResult,var,new,上传,httpclient
From: https://www.cnblogs.com/misakayoucn/p/17758897.html

相关文章

  • 调用微信接口返回openid
    privateStringgetOpenId(Stringcode){Stringurl="https://api.weixin.qq.com/sns/jscode2session";HashMapmap=newHashMap();map.put("appid",appId);map.put("secret",appSecret);m......
  • 标记接口
    在Java中,定义一个空接口作为父类是有意义的,因为它可以作为一个标记接口(MarkerInterface)。标记接口是指没有任何方法的接口,它仅仅是用来标记一个类是否具有某种特定的能力或属性。例如,Java中的Serializable接口就是一个标记接口,它用来标记一个类是否可以被序列化。如果一个类实现......
  • 接口2.0
    packagecom_black.jiekou.Demo01;publicinterfaceEnglish{publicabstractvoidspeak();}packagecom_black.jiekou.Demo01;publicabstractclassPerson{privateStringname;privateintage;publicPerson(){}publicPerson(Stringname,......
  • pytest接口测试中使用 base-url进行环境切换
    pytest-base-url是pytest的第三方插件,主要用来帮助我们进行切换测试环境地址,其中配置方法存在两种,一种直接在命令行中进行添加url参数  命令行参数传入 命令行参数传入,这里需要在我们需要传入的测试用例中,提前加入base-url的参数名称,方便后续命令行时好直接传入参数,也就......
  • 接口测试报500错误
    接口测试的时候报500错误 原因①:在表设计的时候,设置了这个数据不能重复,即表中已经存在了“就业部”这个消息了,所以报错。控制台报错信息:java.sql.SQLIntegrityConstraintViolationException:Duplicateentry'就业部'forkey'dept.name';Duplicateentry'就业部'fork......
  • interface 接口相关【GO 基础】
    〇、接口简介接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。也就是说,接口可以将一种或多种特征归纳到一起,其他不同的对象通过实现此接口,来表示可以具有此类特征,使得不同的类或模块之间进行通信和交互,而不需要了解彼此的具体实现细节,从而......
  • 大文件上传的处理方法——切片上传
    本篇介绍了切片上传的基本实现方式,以及实现切片上传后的一些附加功能,切片上传原理较为简单,代码注释比较清晰就不多赘述了,后面的附加功能介绍了实现原理,并贴出了在原本代码上的改进方式。有什么错误希望大佬可以指出,感激不尽。切片后上传切片上传的原理较为简单,即获取文件后切片,切......
  • Python搭建数据查询接口服务
    启动一个服务,使用FastAPI框架,增加跨域允许1#-*-coding:UTF-8-*-2"""3@author:cc4@file:service.py5@time:2021/05/246"""78importsqlite39fromfastapiimportFastAPI10importuvicorn11importos12fromfastapi.......
  • 文件上传
    文件包含漏洞文件包含漏洞是指利用文件包含函数包含了存在恶意代码的文件,并且解析执行了其中的恶意代码造成的漏洞。在php中常用的文函数有include()、require()、include_once()、require_once()。include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来......
  • Nginx 做前端代理,上传文件速度慢
    同一台服务器,前端部署在nginx,在上传33M的文件时,耗时36s,但是通过IIS或者swagger上传文件,只需要8s解决方案:将Nginx配置文件中 proxy_passhttp://139.196.154.85:54730/;改为localhost: proxy_passhttp://localhost:54730/; 此方案只适用于前后端部署在同一台服务器的情况......