图像上传到SQL的问题

时间:2010-08-17 20:20:00

标签: asp.net-mvc-2 c#-4.0

我将图像上传到SQL数据库时遇到问题。 我在控制器上传

中有方法上传

dbData userDb = new dbData();

public ActionResult Upload()
{
    return View();
}

[HttpPost]
public ActionResult Upload(HttpPostedFileWrapper file)
{
    if (file.ContentLength > 0)
    {
        Stream fileStream = file.InputStream;
        string fileName = Path.GetFileName(file.FileName);
        int fileLength = file.ContentLength;
        byte[] fileData = new byte[fileLength];
        fileStream.Read(fileData, 0, fileLength);

        var image = new ImageTable();
        image.Image = fileData;
        image.Description = "Default profile picture";

        try
        {
            userDb.ImageTables.InsertOnSubmit(image);
            userDb.SubmitChanges();
            return RedirectToAction("Success");
        }
        catch (Exception ex)
        {
            throw;
        }

    }
    return View();
}

如果我使用此视图页

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Upload</title>
</head>
<body>
    <div>

     <% using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" }))
        {%>
        <input name="file" type="file" runat="server" id="file"/><br />
        <input type="submit" value="Upload File" />
<%} %>
    </div>
</body>
</html>

everithing工作得很好,但如果我想使用在masterpage上运行的视图,我会在点击上传提交按钮后收到此错误:

No parameterless constructor defined for this object.

知道某人在哪里有问题,我该如何解决? 感谢

1 个答案:

答案 0 :(得分:1)

发生此错误是因为默认模型绑定程序无法创建不包含无参数构造函数的类的实例(例如HttpPostedFileWrapper)。

最简单的方法是从Request.Files提取文件(例如Request.Files["file"])。

或者,您可以为此创建自定义模型绑定器。

更新:

这是我使用的动作方法:

[HttpPost]
public ActionResult Index(FormCollection form)
{
    var file = Request.Files["file"];
    if(file != null && file.ContentLength > 0)
    {
        // ...
    }

    return View();
}