我需要将用户从文件上传控件中选择的图像保存到站点中的文件(如内容/图像),并使用GUID作为此图像的名称,并将此GUID保存到数据库。 我是MVC的新手,所以请帮我详细说明。 谢谢你们。 这是我的控制器...
[HttpPost]
public ActionResult Create(Product product,HttpPostedFileBase file)
{
if (file!=null&&file.ContentLength>0)
{
var FileName = string.Format("{0}.{1}",Guid.NewGuid(),file.ContentType);
var path = Path.Combine(Server.MapPath("~/Content/Images"), FileName);
file.SaveAs(path);
}
if (ModelState.IsValid)
{
db.Products.AddObject(product);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.CategoryID = new SelectList(db.Categories, "CategoryID", "CategoryName", product.CategoryID);
return View(product);
}
这是我的观点...
@using (Html.BeginForm("Create", "Product", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="Uploader" />
}
我根本不知道发生了什么...... 但是没有HttpPostedFileBase实例,所以if语句失败。
答案 0 :(得分:0)
在您看来,<input type="file" />
的名称应为"file"
,以便模型Binder将其分配给您操作中的file
参数。
基本上是这样的:
@using (Html.BeginForm("Create", "Product", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="file" />
}
答案 1 :(得分:0)
尝试将HttpPostedFileBase参数从文件重命名为Uploader并再次测试
从公共ActionResult Create(产品,HttpPostedFileBase文件)更改 公共ActionResult Create(产品产品,HttpPostedFileBase Uploader)
我的意思是html标签的名称和参数名称是相同的。
答案 2 :(得分:0)
将您的操作更改为:
[HttpPost]
public ActionResult Create(Product product)
{
var files = controllerContext.RequestContext.HttpContext.Request.Files;
foreach (string inputName in files)
{
file = files[inputName];
if (file != null && file.ContentLength > 0)
{
var FileName = string.Format("{0}.{1}", Guid.NewGuid(), file.ContentType);
var path = Path.Combine(Server.MapPath("~/Content/Images"), FileName);
file.SaveAs(path);
}
}
... do other stuff here ...
}
答案 3 :(得分:0)
你需要一些如下所示的条件。 Contenttype值类似于这个图像/ png,image / gif,image / jpeg,所以当你把它组合起来时这样:
0f269598-0d66-4453-a3b5-a8f07254c531.image / PNG
此处代码
string fileExt = "jpg";
if (Imagename.ContentType == "image/png") { fileExt = "png"; }
else if (Imagename.ContentType == "image/gif") { fileExt = "gif"; }
else if (Imagename.ContentType == "image/jpeg") { fileExt = "jpg"; }
答案 4 :(得分:0)
使用这样的方法而不是比较所有图像类型:
fileName = string.Format("{0}{1}", Guid.NewGuid(),
Path.GetExtension(file.FileName));
答案 5 :(得分:0)
为什么不在产品模型中添加'HttpPostedFileBase文件'而不是单独发送它,例如: 模型:
public HttpPostedFileBase File { get; set; }
视图:
@Html.TextBoxFor(m => m.File, new { type = "file" })
它对我来说就像一个魅力!!
哦。顺便说一句。如果您使用的是数据库第一实体模型..您需要通过部分类添加该额外字段,即。
public partial class Product
{
public HttpPostedFileBase File { get; set; }
}