0

我有一个关于使用 ASP.NET MVC 将文件上传到 SQL 数据库的问题。
这是我要存储图像的表:

表“可交付成果”
- item_id
- Deliverable_image

item_id 来自另一个表,我在其中存储图像的名称、描述、标签……!

这是我的 DeliverableController 的创建视图:

@model GDMfrontEnd.Models.DeliverableViewModel

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>EventViewModel</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Title)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Title)
            @Html.ValidationMessageFor(model => model.Title)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Description)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Description)
            @Html.ValidationMessageFor(model => model.Description)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Thumbnail)
        </div>
        <div class="editor-field">
            <!--
            @Html.EditorFor(model => model.Thumbnail)
            @Html.ValidationMessageFor(model => model.Thumbnail)
            -->
            <form action="/profile/upload"  method="post" enctype="multipart/form-data">
              <label for="photo">Photo:</label>
              <input type="file" name="photo" id="photo" />

              <input type="submit" value="Upload" />
            </form>
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Image)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Image)
            @Html.ValidationMessageFor(model => model.Image)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.VideoUrl)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.VideoUrl)
            @Html.ValidationMessageFor(model => model.VideoUrl)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")

    @Scripts.Render("~/bundles/jqueryui")
    @Styles.Render("~/Content/themes/base/css")
    </script>
}

我的 DeliverableViewModel 如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace GDMfrontEnd.Models
{
    public class DeliverableViewModel
    {
        [Required]
        [Display(Name = "Title")]
        public string Title { get; set; }

        [Required]
        [Display(Name = "Description")]
        public string Description { get; set; }

        [Required]
        [Display(Name = "Thumbnail")]
        public byte[] Thumbnail { get; set; }

        [Required]
        [Display(Name = "Image")]
        public byte[] Image { get; set; }

        [Required]
        [Display(Name = "VideoUrl")]
        public string VideoUrl { get; set; }

        public long UsernameID { get; set; }
    }
}

这是我的连接字符串:

  <connectionStrings>
    <add name="gdmwebsiteEntities" connectionString="metadata=res://*/Models.DBModel.csdl|res://*/Models.DBModel.ssdl|res://*/Models.DBModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;User Id=root;database=gdmwebsite&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

但是我怎样才能上传文件而不仅仅是文本呢?
我已经完成了一些教程,但没有一个非常清楚,而且没有一个适用于 MySQL 数据库。

尼尔斯

4

2 回答 2

1

为了完成你想要的,不管我不喜欢在数据库中保存字节数组

首先更改在表单中添加以下参数,这允许您发送图像

@using (Html.BeginForm(null,null ,new { @enctype= "multipart/form-data"}))

修改了您将模型中映射的两个属性从字节数组更改为类型HttpPostedFileBase

public HttpPostedFileBase Image { get; set; }
public HttpPostedFileBase Thumbnail  { get; set; }

在您的视图中添加属性,例如

@Html.TextboxFor(model => model.Thumbnail, new {type="file"})
@Html.TextboxFor(model => model.Image , new {type="file"})

删除不应该有两个嵌套表单的内部表单,

现在,当您收到值时,您可以使用 SaveAs 方法保存或转换为字节数组

model.Image.SaveAs();

有关更多信息,这里是文档

于 2013-05-28T22:12:37.710 回答
0

这为我做到了:

MemoryStream target = new MemoryStream();
model.Image.InputStream.CopyTo(target);
byte[] data = target.ToArray();
于 2013-06-01T08:40:32.407 回答