Проблема с загрузкой изображений в SQL - PullRequest
1 голос
/ 18 августа 2010

У меня проблема с загрузкой изображения в базу данных 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 прекрасно работает, но если я захочу использовать представление, запущенное на главной странице, я получу эту ошибку после того, как нажму кнопку «Отправить»:

No parameterless constructor defined for this object.

Знаешь кого-то, где проблема и как я могу ее исправить? Спасибо

1 Ответ

1 голос
/ 18 августа 2010

Эта ошибка возникает из-за того, что механизм связывания моделей по умолчанию не может создавать экземпляры классов, которые не содержат конструктор без параметров (например, 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...