ICode9

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

(C#语言) httpClient使用put方式提交multiparty/form-data 数据类型 的 csv格式的文件【bear token鉴权】

2022-01-28 14:00:14  阅读:289  来源: 互联网

标签:string multiparty C# 数据类型 DateTime fileStream path new data


要求C#语言在微博service接口中使用content-type:multiparty/form-data属性,上传csv文件,且头部添加bear格式的jwt鉴权。实现通过接口完成批量数据的传输及同步。

//全局变量

public string urlHost=“”;

#region 主函数

[WebMethod(Description="连通性测试")]

public void TestBatch()

{

        urlHost="http://22.22.22.22.:8089/tencent";

        if(!string.IsNullOrEmpty(urlHost))

        {

                //根目录

                string departID = "tt-6e4rrtty4579dsfs96";

                //urlHost 访问地址的接口地址

                urlHost+=string.Format(@"/api/v"+departID +"/obj?obj=user");

                #region 创建文件

                DateTime dt = DateTime.Now;

                string TencentBatch=ConfigurationManager.AppSettings["mulu1"];

                string headPath=ConfigurationManager.AppSettings["mulu2"];

                string middlePath=TencentBatch+dt.Year+"/"+(dt.Month<10?"0":"")+dt.Month+"/"+(dt.Day<10?"0":"")+dt.Day+"/";

                if(!System.IO.Directory.Exists(headPath+middlePath.Replace("/","\\")))

                {

                        Directory.CreateDirectory(headPath+middlePath.Replace("/","\\"));

                }

                //eg:D:\\测试文件夹\\测试1\\测试2\2022\01\22\aa_1_1.csv

                string path = headPath+middlePath.Replace("/","\\")+"aa_1_1.csv";

               int pos=path.LastIndexOf("\\");

                string fileName=path.Substring(pos+1);

               string firstLine=string.Format(@"id,modifiedOn");

               //tchModel上送模板的列明,

               List<tchModel> lt = new List<tchModel>();

               tchModel tmbm = new tchModel();

               tmbm .id="id2";

               tmbm .modifiedOn="2022/02/02";

               lt.Add(tmbm);

               bool bl=WriteFile<tmbm>(path,lt,firstLine); 

                #endregion

                //自定义请求方式

                HttpRequestMessage requestMessage=new HttpRequestMessage();

                requestMessage.Method = HttpMethod.Put;

                requestMessage.RequestUri = new Uri(urlHost);

                //1.数据流存入

                Stream fileStream=new FileStream(path,FileMode.Open,FileAccess.Read); 

                var formData=new MultipartFormDataContent();

                formData.Add(new StreamContent(fileStream),"file",fileName);

                /*

                //2.字节存入

                Stream fileStream=new FileStream(path,FileMode.Open,FileAccess.Read); 

                byte[] data = new byte[fileStream.Length]

                fileStream.Read(data,0,data.Length);

                fileStream.Close();

                formData.Add(new ByteArrayContent(data),"file",fileName); 

                */

                requestMessage.Content=formData;

                /*

                //!注意:千万别指定Content-Type的multiparty/form-data属性,因为该属性会添加boundary属性,其是不可控的。

                //这个值有浏览器生成的。如果强行指明很可能导致边界值不一致而失败。报错信息为

                //result{ StatusCode:400,ReasonPhrase:'Bad Request',Version:1.1,Content:System.Net.Http.StreamContent,Headers:{ i-transaction-id:9bfe3a88-cla8-43df-b9b9-630fdef601de

                //x-envoy-upstream-service-time:16

                //Connection:close

                //Date:Thu,27 Jan 2022 08:09:17 GMT

                //Server:nginx

                //Content-Length:0 } }

                string boundary =string.Format(“-------test{0}-------”,DateTime.Now.Ticks.ToString("x"));

                formData =new MultipartFormDataContent(boundary);

                requestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");

                */

                HttpClient client = new HttpClient();

                var authenticationHeaderValue = new AuthenticationHeaderValue("Bearer",GetToken());

                client.DefaultRequestHeaders.Authorization = authenticationHeaderValue;

                client.DefaultRequestHeaders.Add("CharSet","utf-8");

                

                HttpResponseMessage result = client.SendAsync(requestMessage).Result;

                string responseResult = result.Content.ReadAsStringAsync().Result;

                client.Dispose();

                fileStream.Close();

                try{

                        if(result.IsSuccessStatusCode)

                        {

                                string r=result.Content.ReadAsStringAsync().Result;

                                Context.Response.Write(r);

                        }                

                }finally{

                        fileStream.Close();

                        client.Dispose();

                }

        }

}

#endregion

//====================生成文件===================

public static bool WriteFile<T>(string fileName,List<T> dataTable,string firstLine)

{

        bool flag = false;

        try{

                if(File.Exists(fileName))

                {

                        File.Delete(fileName);

                }

                using(FileStream fs=new FileStream(fileName,FileMode.Create))

                {

                        //指定Encodeing.UTF8,避免生成的文件乱码

                        using(StreamWriter sw = new StreamWriter(fs,Encodeing.UTF8))

                        {

                                string info Line= string.Empty;

                                sw.WriteLine(firstLine);

                                foreach(var item in dataTable)

                                {

                                        infoLine +=",,";

                                }

                                sw.Close();        

                        }

                        fs.Close();

                }

        }

}

//-----生成J问题Token---

public string Get Token()

{

        var headers = new Dictionary<string,object>(){

                {"type","JWT"},

                {"kid","58888888-8888-8888-8888-888888888888"}

        };

        long iat =(long)DateTime.Now.ToUniversalTime().Subtract(new DateTime(1970,1,1)).TotalSeconds;

        long exp =(long)DateTime.Now.AddMinutes(1.0).ToUniversalTime().Subtract(new DateTime(1970,1,1)).TotalSeconds;

        var claims = new Dictionary<string,object>()

        {

                {"aud","test"},

                {"iss","22222222-2222-2222-2222-222222222222"},

                {"iat",iat},

                {"exp",exp},

                {"accounttype","serviceA"}

        };

        //需要通过pem实例化[RS256算法,需要实例化RSAParameters ]

        RSACryptoServiceProvider privateKey;

        string path=HttpContext.Current.Server.MapPath("~/"+"test-pri.pem");

        StreamReader reader =new StreamReader(path);

        PemReader pemReader = new PemReader(reader);

        AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();

        RSAParameters rsaParameters=DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyPair.Private);

        privateKey = new RSACryptoServiceProvider();

        privateKey.ImportParameters(rsaParameters);

        var token=Jose.JWT.Encode(claims,privateKey,Jose.JwsAlgorithm.RS256,extraHeaders:headers);

        return token;

}

标签:string,multiparty,C#,数据类型,DateTime,fileStream,path,new,data
来源: https://blog.csdn.net/xuetianpiaoxue/article/details/122719645

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

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

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

ICode9版权所有