C# HttpClient Multipart 上传文件

使用httpClient 上传文件

需求如下,上传文件接口:

POST /api/app/v01 HTTP/1.1
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; xiaomi 6 Build/LYZ28N) ShoppiesForAndroidApp Version/3.0.15
Cache-Control: no-cache
Content-Type: multipart/form-data; boundary=e7ada41b-4d41-4c87-b050-076f7766ec1e
Content-Length: 148846
Host: api.shoppies.jp
Connection: Keep-Alive
Accept-Encoding: gzip

在这里插入图片描述

Api.cs 实现

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <param name="user"></param>
        /// <param name="filename"></param>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public async Task<HttpRes> UploadImage(User user, string filename, byte[] bytes)
        {
            var token = JpUtil.GetApplicationToken(JpUtil.APP_VERSION, user.Uuid);
            var g = new G {PageId = "SLI_MR001", SessionId = null, Token = token, Version = JpUtil.APP_VERSION};
            var body = new RequestBody {G = g};
            var c = new Dictionary<string, object>();
            var cItems = new List<CItem> {new CItem {Method = "setPhoto", Option = null}};
            c.Add("Sales", cItems);

            body.C = c;
            var client = _factory.CreateClient("api.shoppies.jp");
            client.Timeout = TimeSpan.FromSeconds(60);

            var content = new MultipartFormDataContent();
            content.Add(new StringContent(JsonConvert.SerializeObject(body.G)), "g");
            content.Add(new StringContent(JsonConvert.SerializeObject(body.C)), "c");
            //添加图片
            content.Add(new ByteArrayContent(bytes), "image", filename);

            //添加图片

            var req = new HttpRequestMessage
            {
                Method = HttpMethod.Post,
                RequestUri = new Uri("https://api.shoppies.jp/api/app/v01"),
                Content = content,
                Headers =
                {
                    {
                        "User-Agent",
                        "Dalvik/2.1.0 (Linux; U; Android 5.1.1; xiaomi 6 Build/LYZ28N) ShoppiesForAndroidApp Version/3.0.15"
                    }
                }
            };
            return await Request(client, req);
        }

具体请求调用方法

        public async Task<HttpRes> Request(HttpClient client, HttpRequestMessage req)
        {
            var httpRes = new HttpRes
            {
                Data = null,
                Ok = false,
                Message = "REQUEST FAIL",
                Status = 200,
                Method = req.Method.ToString()
            };
            try
            {
                client.Timeout = TimeSpan.FromSeconds(60);
                var res = await client.SendAsync(req);
                httpRes.Status = (int) res.StatusCode;

                if (res.IsSuccessStatusCode)
                {
                    var html = await res.Content.ReadAsStringAsync();
                    httpRes.Str = html;
                    try
                    {
                        var data = JsonConvert.DeserializeObject<ResData>(html);
                        httpRes.Data = data;
                        httpRes.Code = data.StatusCode;
                    }
                    catch (Exception e)
                    {
                        // ignored
                    }

                    httpRes.Ok = res.StatusCode == HttpStatusCode.OK; //默认code
                }
            }
            catch (Exception ex)
            {
                httpRes.Ok = false;
                httpRes.Message = $"请求异常:{ex.Message}";
            }
            finally
            {
                Console.WriteLine($"URI:{req.RequestUri}\tRespMessage:{httpRes.Message}\tStatus={httpRes.Status}");
            }

            return httpRes;
        }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值