Как сохранить изображение в БД путем преобразования строки в System.Web.HttpPostedFileBase - PullRequest
0 голосов
/ 12 октября 2018

Мне нужно добавить изображение в мою базу данных. Моя база данных выглядит следующим образом

TableName = Product
- PId[int] 
- PImage[nvarchar(max)]

Я делаю приложение в ASP.NET MVC, используя DB FIRST APPROACH, поэтому мой класс модели выглядит следующим образом (чтоавтоматически генерируется)

using System;
using System.Collections.Generic;

public partial class Product
{
    public int PId { get; set; }
    public string PImage { get; set; }
}

Мой контроллер для добавления нового изображения выглядит следующим образом.Я делаю так, потому что мой взгляд в React

public ActionResult Create()
{
    return View();
}

[HttpPost]
public ActionResult Create(string myData)
{
    var details = Newtonsoft.Json.Linq.JObject.Parse(myData);

    int PId = Convert.ToInt32((string)details["PId"]);
    string PImage = [(string)details["PImage"]];   // An error is coming Cannot implicitly convert type 'System.Web.HttpPostedFileBase' to 'string'

    Product p = new Product() { PId = PId, PImage = PImage };
    db.Products.Add(p);
    db.SaveChanges();

    return View();
}

Мой взгляд в порядке, он возвращает и PId, и PImage PId сохраняется в БД. Проблема в том, что я не знаю, как сохранить изображения вдб.

1 Ответ

0 голосов
/ 16 октября 2018

Добавление вашего класса:

 public HttpPostedFileBase Image { get; set; }

, затем контроллер:

 var imageFile = ConvertFileInByteArray(model.Image.InputStream, model.Image.ContentLength);

   private byte[] ConvertFileInByteArray(Stream inputStream, int contentLength)
    {
        try
        {
            byte[] file = null;
            using (var binaryReader = new BinaryReader(inputStream))
            {
                file = binaryReader.ReadBytes(contentLength);
            }
            return file;
        }
        catch (Exception e)
        {
            _logger.Error(e);
            Console.Write(e.ToString());
            throw;
        }
    }

    string imageStr = ComputeHash(imageFile);

    private string ComputeHash(byte[] file)
    {
        MD5 md5 = MD5.Create();

        byte[] hashAraay = md5.ComputeHash(file);

        var builder = new StringBuilder();

        foreach (byte b in hashAraay)
        {
            builder.AppendFormat("{0:x2}", b);
        }

        return builder.ToString();
    }
...