1

我需要将用户从文件上传控件中选择的图像保存到站点中的文件(如内容/图像)中,并使用 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 语句失败。

4

6 回答 6

0

尝试将 HttpPostedFileBase 参数从文件重命名为 Uploader 并再次测试

从 public ActionResult Create(Product product,HttpPostedFileBase file) 更改为 public ActionResult Create(Product product,HttpPostedFileBase Uploader)

我的意思是html标签的名称和参数名称是相同的。

于 2012-05-18T04:27:23.173 回答
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 ...

}
于 2012-05-31T11:32:56.137 回答
0

在您看来,<input type="file" />应该具有名称"file",以便模型绑定器将其分配给file您操作中的参数。

所以基本上:

    @using (Html.BeginForm("Create", "Product", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
        <input type="file" name="file" /> 
    }
于 2012-05-04T15:28:08.737 回答
0

为什么不在产品模型中添加“HttpPostedFileBase 文件”而不是单独发送,例如:模型:

 public HttpPostedFileBase File { get; set; } 

看法:

  @Html.TextBoxFor(m => m.File, new { type = "file" })

它对我来说就像一个魅力!

哦。顺便说一句。如果您使用的是数据库优先实体模型..您需要通过部分类添加该额外字段,即。

public partial class Product                    
    {
        public HttpPostedFileBase File { get; set; }
    }
于 2014-08-13T04:30:35.500 回答
0

像这样使用而不是比较所有图像类型:

 fileName = string.Format("{0}{1}", Guid.NewGuid(),
 Path.GetExtension(file.FileName));
于 2014-03-09T13:54:47.000 回答
0

您需要一些如下所示的条件。 Contenttype 值类似于此 image/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"; }
于 2013-04-23T07:38:56.517 回答