C#使用HttpClient上傳文件並附帶其他參數


HttpClientMultipartFormDataContent傳送門)最低適用於.NET Framework 4.5版本

發送端代碼

using (HttpClient client = new HttpClient())
{
    var content = new MultipartFormDataContent();
    //添加字符串參數,參數名為qq
    content.Add(new StringContent("123456"), "qq");

    string path = Path.Combine(System.Environment.CurrentDirectory, "1.png");
    //添加文件參數,參數名為files,文件名為123.png
    content.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(path)), "file", "123.png");

    var requestUri = "http://192.168.1.108:56852/api/Test/SaveFile";
    var result = client.PostAsync(requestUri, content).Result.Content.ReadAsStringAsync().Result;

    Console.WriteLine(result);
}

接收端代碼

[HttpPost]
public async Task<JsonResult> SaveFile([FromForm]string qq, IFormFile file)
{
    return await Task.Run(() =>
    {
        try
        {
            //保存文件到本地
            var filefullPath = Path.Combine(Directory.GetCurrentDirectory(), file.FileName);
            using (FileStream fs = new FileStream(filefullPath, FileMode.Create))
            {
                file.CopyTo(fs);
                fs.Flush();
            }
        }
        catch (Exception ex)
        {
            return Fail(file.FileName + "---" + ex.Message);
        }
        return Success();
    });
}

注意:如果要通過參數形式接收數據,需要確保參數名稱和上面發送請求中設置的名稱一致,否則無法自動綁定到參數中,且需要給參數加上[FromForm]的標記。

使用model對象接收數據

public class SaveFileModel
{
    public string qq { get; set; }
    public IFormFile File { get; set; }
}
public async Task<JsonResult> SaveFile([FromForm]SaveFileModel model)
{
    //......
}

使用HttpContext從請求的Form中獲取數據

public async Task<JsonResult> SaveFile()
{
    return await Task.Run(() =>
    {
        var files = HttpContext.Request.Form.Files;
        var qq = HttpContext.Request.Form["qq"];
        //......
    });
}

總結

這個問題是在寫一個.Net Core項目時遇到的,以前在.Net Framework 4.0的時候,使用string拼接表單中文件的內容,到處都是boundary分界線。用MultipartFormDataContent來進行表單提交上傳文件是它內部幫我們拼接了這個復雜的內容。(可以用Fiddler抓一下請求看看)emm...我去找一下當初是怎么弄的文件上傳,如果有再更新此文。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM