[HttpPost]
[ValidateAntiForgeryToken]
public async Task UploadPhoto(UserViewModel userViewModel)
{
if (ModelState.IsValid)
{
var formFile = userViewModel.Photo;
if (formFile == null || formFile.Length == 0)
{
ModelState.AddModelError("", "Uploaded file is empty or null.");
return View(viewName: "Index");
}
var uploadsRootFolder = Path.Combine(_environment.WebRootPath, "uploads");
if (!Directory.Exists(uploadsRootFolder))
{
Directory.CreateDirectory(uploadsRootFolder);
}
var filePath = Path.Combine(uploadsRootFolder, formFile.FileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(fileStream).ConfigureAwait(false);
}
RedirectToAction("Index");
}
return View(viewName: "Index");
}
Как ограничить размер загружаемых файлов размером менее 5 МБ с определенными расширениями, такими как .jpeg и .png? Я думаю, что обе эти проверки выполняются в ViewModel. Но я не знаю, как это сделать.
Я использую ASP.NET Core 2.2 и привязку модели для загрузки файла.
Это моя [b]UserViewModel[/b]
[code]public class UserViewModel { [Required(ErrorMessage = "Please select a file.")] [DataType(DataType.Upload)] public IFormFile Photo { get; set; } } [/code]
Это [b]MyView[/b]
[code]@model UserViewModel
[/code]
И, наконец, это [b]MyController[/b]
[code][HttpPost] [ValidateAntiForgeryToken] public async Task UploadPhoto(UserViewModel userViewModel) { if (ModelState.IsValid) { var formFile = userViewModel.Photo; if (formFile == null || formFile.Length == 0) { ModelState.AddModelError("", "Uploaded file is empty or null."); return View(viewName: "Index"); }
var uploadsRootFolder = Path.Combine(_environment.WebRootPath, "uploads"); if (!Directory.Exists(uploadsRootFolder)) { Directory.CreateDirectory(uploadsRootFolder); }
var filePath = Path.Combine(uploadsRootFolder, formFile.FileName); using (var fileStream = new FileStream(filePath, FileMode.Create)) { await formFile.CopyToAsync(fileStream).ConfigureAwait(false); }
Как ограничить размер загружаемых файлов размером менее 5 МБ с определенными расширениями, такими как .jpeg и .png? Я думаю, что обе эти проверки выполняются в ViewModel. Но я не знаю, как это сделать.