Asp.Net Core Web API上傳檔案

在 Asp.Net Core 要上傳檔案,非常容易

直接建立一個新的 Asp.Net Core Web Api 專ˋ案
在 ValuesController 裡輸入下面程式碼

[HttpPost("UploadFile")]
public string UploadFile([FromForm]IFormFile file) {
	return $"got file: {file.FileName}";
}

啟動專案後,我們在 Postman 使用 form-data 傳送檔案

這邊注意兩個地方,傳輸協定選擇 form-data,並且 Key 要和方法的參數名稱一樣
這也意味著如果要傳兩個檔案時,可以下兩個參數

[HttpPost("UploadFile")]
public string UploadFile([FromForm]IFormFile file, [FromForm]IFormFile file2) {
	return $"got file: {file.FileName} and file2: {file2.FileName}";
}

不過如果遇到要上傳不定數量的檔案呢?
這時可以使用 ICollection,如下

[HttpPost("UploadFile")]
public string UploadFile([FromForm]ICollection<IFormFile> files) {
	return $"got {files.Count} files";
}

使用 Postman 的時候 Key 必須都使用同樣的名稱

接著讓我們設想一個狀況,
Client 要傳送使用者的檔案,包含一張照片和姓名、電話
此時可以有幾種作法,第一種是直接加在參數裡

另一個方法是建立一個接收用的物件

public class ProfileData {
	public string Name { get; set; }
	public string Phone { get; set; }
	public IFormFile Avatar { get; set; }
}

[HttpPost("CreateProfile2")]
public string CreateProfile([FromForm]ProfileData profile) {
	return $"get avatar:{profile.Avatar.FileName}, name:{profile.Name}, phone:{profile.Phone}";
}

此時傳送一樣的資料也會對應到

Asp.Net Core 的檔案傳送是不是很簡單呢?