当前位置 : 主页 > 网络编程 > c#编程 >

C#HttpClientPost参数同时上传文件的实现

来源:互联网 收集:自由互联 发布时间:2023-01-31
目录 HttpClient Post参数同时上传文件 Demo 如下 HttpClient上传文件到服务器(multipart/form-data) HttpClient Post参数同时上传文件 Demo 如下 using (var client = new HttpClient()){    using (var multipartFormDataC
目录
  • HttpClient Post参数同时上传文件
    • Demo 如下
  • HttpClient上传文件到服务器(multipart/form-data)

    HttpClient Post参数同时上传文件

    Demo 如下

    using (var client = new HttpClient())
    {
        using (var multipartFormDataContent = new MultipartFormDataContent())
        {
            var values = new[]
            {
                new KeyValuePair<string, string>("c", "3"),
                new KeyValuePair<string, string>("c", "2"),
                new KeyValuePair<string, string>("d", "2")
                 //other values
            };
     
            foreach (var keyValuePair in values)
            {
                multipartFormDataContent.Add(new StringContent(keyValuePair.Value),
                    String.Format("\"{0}\"", keyValuePair.Key));
            }
     
            multipartFormDataContent.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(@"D:\test.jpg")),
                "\"pic\"",
                "\"test.jpg\"");
     
            var requestUri = "http://localhost:8080";
            var html = client.PostAsync(requestUri, multipartFormDataContent).Result.Content.ReadAsStringAsync().Result;
        }
    }

    HttpClient上传文件到服务器(multipart/form-data)

    string reqUrl = JsonrpcHttpClient.MakeRpcUrl(typeof(Wfm_SimReport).Name, "save");
    using (HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false }))//若想手动设置Cookie则必须设置UseCookies = false
    {
                                   
        string boundary = string.Format("----WebKitFormBoundary{0}",DateTime.Now.Ticks.ToString("x"));
        MultipartFormDataContent content = new MultipartFormDataContent(boundary);
     
        #region 设置请求参数
        content.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
        content.Headers.Add("Cookie", TokenManager.Token);
        content.Headers.Add("client", "true");
     
        #endregion
        if (string.IsNullOrEmpty(fullPath) && !File.Exists(fullPath))
        {
            return false;
        }
     
        string fileName = Path.GetFileName(fullPath);
     
        #region Stream请求
        FileStream fStream = File.Open(fullPath, FileMode.Open, FileAccess.Read);
        content.Add(new StreamContent(fStream, (int)fStream.Length), "file", fileName);
                    
        #endregion
        content.Add(new StringContent(JsonHelper.Serialize(entity)), "dtoStr");
        var result = client.PostAsync(reqUrl, content).Result;
     
        try
        {
            if (result.IsSuccessStatusCode)
            {
                string rslt = result.Content.ReadAsStringAsync().Result;
                Debug.WriteLine(rslt);
                return true;
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(string.Format("获取服务器返回结果错误:消息:{0},堆栈:{1}",ex.Message,ex.StackTrace));
        }
        finally
        {
            //关闭文件流
            fStream.Close();
            client.Dispose();
        }                
     }

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

    上一篇:C#中后台post请求常用的两种方式总结
    下一篇:没有了
    网友评论