1. 程式人生 > >C# HttpClient上傳檔案到伺服器(multipart/form-data)

C# 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();
    }                
 }