前提・実現したいこと
VisualStudioのMVCを使ってWEBページを作っています。使用言語はC#とhtmlです。
ブラウザの中で画像の添付を行って、ブラウザでその添付した画像を表示させています。ブラウザでは画像以外にも入力フォームが実装されていて、その中に添付された画像が表示されています。
発生している問題・エラーメッセージ
入力内容の保存をするときに、画像に変更がなかった場合も入力フォームに変更があればその部分だけでも保存したいのですが、そのまま保存すると元々あった画像が消えてしまいます。
該当のソースコード
Model public string PhotoName { get; set; } public byte[] PhotoContent { get; set; } [Display(Name = "写真1")] public byte[] Thumbnail { get; set; } public DateTime? TimeStamp { get; set; } [Display(Name = "写真2")] public string tenpu { get; set; }
Viewのhtmlで使用している主なコード @using (Html.BeginForm("Edit", "sinkis", FormMethod.Post, new { enctype = "multipart/form-data" })) <div class="form-group"> @Html.LabelFor(model => model.tenpu, htmlAttributes: new { @class = "control-label col-md-2" }) @Html.TextBox("data", "", new { type = "file", size = 20 }) </div>
controllerのC# public ActionResult Edit([Bind(Include = "Id,input,Photoname.PhotoContent,Thumbnail,TimeStamp,tenpu,sinseibi,uketukeNO,data")] sinki sinki, HttpPostedFileBase data) { if (ModelState.IsValid) { db.Entry(sinki).State = EntityState.Modified; db.SaveChanges(); //return RedirectToAction("Index"); } // //写真 if (ModelState.IsValid) { //ここに6行のif文追加予想 if(data == null) { db.sinki.Add(sinki); db.SaveChanges(); return RedirectToAction("Edit"); } var fileName = data.FileName; if (fileName.Length > 50) { fileName = fileName.Substring(0, 50); } //拡張子チェック var permit = new string[] { ".jpg", "jpeg", ".png", ".gif" }; if (!permit.Contains(Path.GetExtension(fileName.ToLower()))) { ViewBag.Message = "jpg, jpeg, png, gif以外のファイルはアップロードできません"; return View(); } //※SQLServerに保存 using (var reader = new BinaryReader(data.InputStream)) { var byteData = reader.ReadBytes(data.ContentLength); //サムネイル取得用にイメージに戻す System.Drawing.ImageConverter imgconv = new ImageConverter(); Image img = (Image)imgconv.ConvertFrom(byteData); int[] pils = img.PropertyIdList; int index = Array.IndexOf(pils, 0x501b); // サムネイル・データ if (index == -1) { // サムネイルの作成 Image thumbnail = img.GetThumbnailImage(160, 120, delegate { return false; }, IntPtr.Zero); // サムネイルの保存 sinki.Thumbnail = (byte[])imgconv.ConvertTo(thumbnail, typeof(byte[])); thumbnail.Dispose(); } else { // サムネイル・データの取得 PropertyItem pi = img.PropertyItems[index]; byte[] jpgBytes = pi.Value; sinki.Thumbnail = jpgBytes; } img.Dispose(); sinki.PhotoContent = byteData; } sinki.PhotoName = fileName; db.sinki.Add(sinki); db.SaveChanges(); } return View(sinki); }
試したこと
dataがnullな状態でもそれ以外を保存できればと思い、6行のif文を入れてみたのですが、これだけだと、画像がnullのままになってしまいますが、どう記述すればいいのかイメージが湧きません。もしくは根本的な考えが間違っているのでしょうか。
if(data == null)
{
db.sinki.Add(sinki);
db.SaveChanges();
return RedirectToAction("Edit");
}
開発環境
Microsoft Visual Studio2019
.NET Framework
回答1件
あなたの回答
tips
プレビュー