ASP.NET Core中的多个文件上传不起作用
我正在研究.NET Core 3.1。我的问题是,当我尝试上传多个文件时,它仅选择我已上传的文件。对于鸡蛋,当我上传3个文件时,只有第三个文件进入控制器。
我的模型:
public class ProductModel
{
public int ProductId { get; set; }
[Required(ErrorMessage ="Product Name is Required")]
public string ProductName { get; set; }
public string ProductDescription { get; set; }
[Required(ErrorMessage ="Atleast one category need to be selected")]
public int[] ProductCategoryIds { get; set; }
public string Category { get; set; }
[Required(ErrorMessage = "Product Needs to have any brand")]
public int? BrandId { get; set; }
public string BrandName { get; set; }
[Required(ErrorMessage ="Tax is Required")]
public int? TaxId { get; set; }
public DateTime CreatedDate { get; set; }
[Required(ErrorMessage ="Product Price is Required")]
public decimal? ProductPrice { get; set; }
public string ProductModels { get; set; }
[Required(ErrorMessage ="Available quantity is Required")]
public int? AvailableQuantity { get; set; }
public string StockStatus { get; set; }
[Required(ErrorMessage = "Image is Required")]
[ValidateFile(ErrorMessage ="Invalid File Type")]
//[RegularExpression(@"([a-zA-Z0-9\s_\\.\-:])+(.png|.jpg|.JPG|.PNG)$", ErrorMessage = "Invalid File types")]
public IFormFile ProductImage { get; set; }
public string ProductImagePath { get; set; }
public List<IFormFile> AdditionalImages { get; set; }
public bool IsActive { get; set; }
public string ColorAttribute { get; set; }
public int? DiscountProductCount1 { get; set; }
public int? DiscountProductCount2 { get; set; }
public int? DiscountProductCount3 { get; set; }
public int[] AttributesId { get; set; }
public string AttributesAsString { get; set; }
public decimal? DiscountProductPrice1 { get; set; }
public decimal? DiscountProductPrice2 { get; set; }
public decimal? DiscountProductPrice3 { get; set; }
public string DiscountJson { get; set; }
public decimal? ProductPriceOffer { get; set; }
public int? MinimumQuantity { get; set; }
public List<ProductImageModel> ProductImageList { get; set; }
public List<CategoryModel> CategoryList { get; set; }
public TaxModel Tax { get; set; }
public List<TaxModel> TaxList { get; set; }
public List<AttributesModel> AttributesList { get; set; }
public List<ProductDiscountModel> DiscountsList { get; set; }
public string CreatedBy { get; set; }
}
我的CSHTML:
<form asp-action="NewProducts" asp-controller="Product" method="post" autocomplete="off" enctype="multipart/form-data">
<div class="form-group col-md-6">
<label>Product Additional Image</label>
<input type="file" class="form-control" id="AdditionalImages" asp-for="Product.AdditionalImages" multiple
placeholder="Product Additional Image">
</div>
</form>
我的控制器,当我仅提交最新文件时,将进入控制器:
public IActionResult NewProducts(ProductModel product)
{
try
{
if (ModelState.IsValid)
{
product.AttributesAsString = GetAttributesAsJson(product);
product.DiscountJson = GetDiscountsAsJson(product);
//saving general and category details of product
ProductModel results = _product.SaveProductGeneral(product);
product.ProductId = results.ProductId;
List<ProductImageModel> images= GetProductImages(product);
//saving all images
//string allImagesJson = JsonConvert.SerializeObject(images);
foreach(var image in images)
{
_product.SaveProductImages(image);
}
ViewData["SuccessFormMessage"] = "Created Successfully";
ViewData["ErrorFormMessage"] = string.Empty;
ModelState.Clear();
}
else
{
ViewData["SuccessFormMessage"] = string.Empty;
ViewData["ErrorFormMessage"] = "Check all Required Fields";
}
ProductViewModel container = new ProductViewModel();
container.Heading = new HeadingModel();
container.Heading.MainHeading = "Product Management";
container.Heading.SubHeading = "Addd new products for your store";
ViewData["BrandDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_brand.GetAllBrandsByType("Active"), null, "brand");
ViewData["TaxDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_tax.GetAllTaxesForDropDown("product"), null, "tax");
ViewData["CategoryDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_category.GetCategoriesByStatus("Active").Where(x => x.Level == 1).ToList(), null, "category");
ViewData["StatusDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_common.GetAllActiveStatus(), null, "status");
ViewData["AttributesDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_attributes.GetAllAttributes(), null, "attributes");
return View(container);
}
catch(Exception ex)
{
_common.SaveErrorLog(ex.ToString());
ProductViewModel container = new ProductViewModel();
container.Heading = new HeadingModel();
container.Heading.MainHeading = "Product Management";
container.Heading.SubHeading = "Addd new products for your store";
ViewData["BrandDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_brand.GetAllBrandsByType("Active"), null, "brand");
ViewData["TaxDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_tax.GetAllTaxesForDropDown(string.Empty), null, "tax");
ViewData["CategoryDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_category.GetCategoriesByStatus("Active").Where(x => x.Level == 1).ToList(), null, "category");
ViewData["StatusDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_common.GetAllActiveStatus(), null, "status");
ViewData["AttributesDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_attributes.GetAllAttributes(), null, "attributes");
ViewData["SuccessFormMessage"] = string.Empty;
ViewData["ErrorFormMessage"] = "Something went wrong in our end";
return View(container);
}
I am working on .net core 3.1. My problem is when I try to upload multiple files it is picking only the file which I have uploaded latest. For egg, when I upload 3 files only the third file is coming into the controller.
My model:
public class ProductModel
{
public int ProductId { get; set; }
[Required(ErrorMessage ="Product Name is Required")]
public string ProductName { get; set; }
public string ProductDescription { get; set; }
[Required(ErrorMessage ="Atleast one category need to be selected")]
public int[] ProductCategoryIds { get; set; }
public string Category { get; set; }
[Required(ErrorMessage = "Product Needs to have any brand")]
public int? BrandId { get; set; }
public string BrandName { get; set; }
[Required(ErrorMessage ="Tax is Required")]
public int? TaxId { get; set; }
public DateTime CreatedDate { get; set; }
[Required(ErrorMessage ="Product Price is Required")]
public decimal? ProductPrice { get; set; }
public string ProductModels { get; set; }
[Required(ErrorMessage ="Available quantity is Required")]
public int? AvailableQuantity { get; set; }
public string StockStatus { get; set; }
[Required(ErrorMessage = "Image is Required")]
[ValidateFile(ErrorMessage ="Invalid File Type")]
//[RegularExpression(@"([a-zA-Z0-9\s_\\.\-:])+(.png|.jpg|.JPG|.PNG)quot;, ErrorMessage = "Invalid File types")]
public IFormFile ProductImage { get; set; }
public string ProductImagePath { get; set; }
public List<IFormFile> AdditionalImages { get; set; }
public bool IsActive { get; set; }
public string ColorAttribute { get; set; }
public int? DiscountProductCount1 { get; set; }
public int? DiscountProductCount2 { get; set; }
public int? DiscountProductCount3 { get; set; }
public int[] AttributesId { get; set; }
public string AttributesAsString { get; set; }
public decimal? DiscountProductPrice1 { get; set; }
public decimal? DiscountProductPrice2 { get; set; }
public decimal? DiscountProductPrice3 { get; set; }
public string DiscountJson { get; set; }
public decimal? ProductPriceOffer { get; set; }
public int? MinimumQuantity { get; set; }
public List<ProductImageModel> ProductImageList { get; set; }
public List<CategoryModel> CategoryList { get; set; }
public TaxModel Tax { get; set; }
public List<TaxModel> TaxList { get; set; }
public List<AttributesModel> AttributesList { get; set; }
public List<ProductDiscountModel> DiscountsList { get; set; }
public string CreatedBy { get; set; }
}
My cshtml:
<form asp-action="NewProducts" asp-controller="Product" method="post" autocomplete="off" enctype="multipart/form-data">
<div class="form-group col-md-6">
<label>Product Additional Image</label>
<input type="file" class="form-control" id="AdditionalImages" asp-for="Product.AdditionalImages" multiple
placeholder="Product Additional Image">
</div>
</form>
My controller, when I submits only the latest file is coming into the controller:
public IActionResult NewProducts(ProductModel product)
{
try
{
if (ModelState.IsValid)
{
product.AttributesAsString = GetAttributesAsJson(product);
product.DiscountJson = GetDiscountsAsJson(product);
//saving general and category details of product
ProductModel results = _product.SaveProductGeneral(product);
product.ProductId = results.ProductId;
List<ProductImageModel> images= GetProductImages(product);
//saving all images
//string allImagesJson = JsonConvert.SerializeObject(images);
foreach(var image in images)
{
_product.SaveProductImages(image);
}
ViewData["SuccessFormMessage"] = "Created Successfully";
ViewData["ErrorFormMessage"] = string.Empty;
ModelState.Clear();
}
else
{
ViewData["SuccessFormMessage"] = string.Empty;
ViewData["ErrorFormMessage"] = "Check all Required Fields";
}
ProductViewModel container = new ProductViewModel();
container.Heading = new HeadingModel();
container.Heading.MainHeading = "Product Management";
container.Heading.SubHeading = "Addd new products for your store";
ViewData["BrandDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_brand.GetAllBrandsByType("Active"), null, "brand");
ViewData["TaxDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_tax.GetAllTaxesForDropDown("product"), null, "tax");
ViewData["CategoryDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_category.GetCategoriesByStatus("Active").Where(x => x.Level == 1).ToList(), null, "category");
ViewData["StatusDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_common.GetAllActiveStatus(), null, "status");
ViewData["AttributesDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_attributes.GetAllAttributes(), null, "attributes");
return View(container);
}
catch(Exception ex)
{
_common.SaveErrorLog(ex.ToString());
ProductViewModel container = new ProductViewModel();
container.Heading = new HeadingModel();
container.Heading.MainHeading = "Product Management";
container.Heading.SubHeading = "Addd new products for your store";
ViewData["BrandDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_brand.GetAllBrandsByType("Active"), null, "brand");
ViewData["TaxDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_tax.GetAllTaxesForDropDown(string.Empty), null, "tax");
ViewData["CategoryDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_category.GetCategoriesByStatus("Active").Where(x => x.Level == 1).ToList(), null, "category");
ViewData["StatusDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_common.GetAllActiveStatus(), null, "status");
ViewData["AttributesDropDown"] = CommonUtils.CommonUtils.GetDropDownByType(_attributes.GetAllAttributes(), null, "attributes");
ViewData["SuccessFormMessage"] = string.Empty;
ViewData["ErrorFormMessage"] = "Something went wrong in our end";
return View(container);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
以下是有关获取文件的演示,您可以参考它。
muticontroller:
index
tovers torys
:
Below is demo about getting files, you can refer to it.
MutiController:
Index
MultipleFile:
result: