ファイルをパラメーターとして受け取るエンドポイントを作成しました。
[HttpPost("[action]")]
[Consumes("multipart/form-data")]
public ActionResult UploadImage(IFormFile Files, string param)
{
long size = Files.Length;
var tempPath = Path.GetTempFileName();
string file_Extension = Path.GetExtension(Files.FileName);
var isValidFile = FileValidation.FileUploadValidation(Files);
if (isValidFile.data)
{
string filename = Guid.NewGuid() + "" + file_Extension;
return null;
}
else
{
return null;
}
}
問題なくファイルを取得できません。同じメソッドにさらにテキストパラメータを追加するにはどうすればよいですか?
[HttpPost("[action]")]
[Consumes("multipart/form-data")]
public IActionResult UploadImage([FromForm] FileInputModel Files)
{
return Ok();
}
public class FileInputModel
{
public IFormFile File { get; set; }
public string Param { get; set; }
}
追加する必要があります[FormFrom]
追加後のパラメータモデルの前[FormFrom]
コードは完全に機能します。
100%動作します。テスト済み。以下の手順を実行してください。
次のようにモデルのカスタムクラスを作成する必要があります
public class FileInputModel
{
public string Name { get; set; }
public IFormFile FileToUpload { get; set; }
}
のような形
<form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="UploadFileViaModel" >
<input name="Name" class="form-control" />
<input name="FileToUpload" type="file" class="form-control" />
<input type="submit" value="Create" class="btn btn-default" />
</form>
とコントローラのような
[HttpPost]
public async Task<IActionResult> UploadFileViaModel([FromForm] FileInputModel model)
{
if (model == null || model.FileToUpload == null || model.FileToUpload.Length == 0)
return Content("file not selected");
var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", model.FileToUpload.FileName);
using (var stream = new FileStream(path, FileMode.Create))
{
await model.FileToUpload.CopyToAsync(stream);
}
return RedirectToAction("Files");
}
私は次のコードでテストし、それは動作します:
public class TestController : Controller
{
[HttpPost("[controller]/[action]")]
public IActionResult Upload(Model model)
{
return Ok();
}
public class Model
{
public IFormFile File { get; set; }
public string Param { get; set; }
}
}
モデルを使用する必要があることに注意してください。
以下は、同じ属性を持つ郵便配達員のスクリーンショットです。
[〜#〜] update [〜#〜]複数のファイルの場合:
モデルを次のように変更します。
public class Model
{
public List<IFormFile> Files { get; set; }
public string Param { get; set; }
}
更新2
コンテンツタイプヘッダーはmultipart/form-data
これが機能しているスクリーンショットです: