如何在mvc4中创建一个到sql数据库的imageurl链接

时间:2014-01-08 07:30:26

标签: sql asp.net-mvc-4

大家好我怎么能将imageurl插入数据库?插入数据库后,我的imageurl行显示为NULL。

    public HttpPostedFileBase ImageURL { get; set; }

my question.cshtml

<tr>
        <td  colspan="3">
            @Html.LabelFor(model => model.ImageURL)
            @Html.TextBoxFor(model => model.ImageURL, new { type = "file", id="fileupload", name="fileupload" })
            @Html.ValidationMessageFor(model => model.ImageURL)
            <img src="#" id="imgThumbnail" alt="preview" width="10%" height="15%" />
        </td>

我的控制器

foreach (QuestionVM0 q1 in qo)
            {

                int aID = question1.ActivityID.Value;

                string sImageURL = q1.ImageURL.ToString();



                Models.question1 questionCreate = new question1();

                questionCreate.ImageURL = sImageURL;
                db.questions1.Add(questionCreate);
                db.SaveChanges();
            }

1 个答案:

答案 0 :(得分:1)

您的实体框架模型应该有byte[]属性映射到数据库中的varbinary(max)列。看来目前你已经将它定义为一个错误的字符串。所以:

public class question1 
{
    public byte[] ImageURL { get; set; }
    ...
}

然后从视图模型上的HttpPostedFileBase属性中读取并将其复制到EF模型上的byte[]属性中:

foreach (QuestionVM0 q1 in qo)
{
    int aID = question1.ActivityID.Value;

    byte[] imageData = null;
    using (MemoryStream target = new MemoryStream())
    {
        q1.ImageURL.InputStream.CopyTo(target);
        imageData = target.ToArray();
    }

    Models.question1 questionCreate = new question1();
    questionCreate.ImageURL = imageData;
    db.questions1.Add(questionCreate);
    db.SaveChanges();
}

更新:

您似乎只想将文件的位置存储在数据库中,而不是文件本身。在这种情况下,您应该这样做:

foreach (QuestionVM0 q1 in qo)
{
    int aID = question1.ActivityID.Value;

    string fileName = Path.GetFileName(q1.ImageURL.FileName);
    string path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
    q1.ImageURL.SaveAs(path);

    Models.question1 questionCreate = new question1();
    questionCreate.ImageURL = path;
    db.questions1.Add(questionCreate);
    db.SaveChanges();
}