0

ASP.NET MVC を使用して SQL データベースにファイルをアップロードする方法について質問があります。
これは、画像を保存するテーブルです。

テーブル「成果物」
- item_id
- 成果物_画像

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

DBにバイト配列を保存したくないにもかかわらず、あなたが望むことを達成するために

最初に変更して、フォームに次のパラメーターを追加します。これにより、画像を送信できます

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

モデルにマップされた 2 つのプロパティをバイト配列から型に変更しました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"})

2 つのネストされたフォームを持つべきではない内部フォームを削除します。

値を受け取ったら、SaveAs メソッドを使用して保存するか、バイト配列に変換できます

model.Image.SaveAs();

詳細については、こちらのドキュメントをご覧ください

于 2013-05-28T22:12:37.710 に答える
0

This did it for me:

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