Как сохранить строку base64 как изображение в папку в C#? - PullRequest
0 голосов
/ 29 мая 2020

Я хочу сохранить строку base64 как изображение в папке на сервере и в базе данных, используя C#. Но я получаю сообщение «В GDI + произошла общая ошибка c». Может кто-нибудь сказать мне, что не так с этим кодом?

Мой контроллер:

    public ActionResult ShareProduct(Product item, PhotoProduct prphoto, string[] Photo)
    {
    foreach (string file in Photo)
            {
                if (file != null)
                {
                    string base64 = file.Substring(file.IndexOf(',') + 1); 
                    base64 = base64.Trim('\0'); 
                    byte[] imageBytes = Convert.FromBase64String(base64); 
                    using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
                    {
                        Image image = Image.FromStream(ms, true);
                        string newPhoto = Guid.NewGuid().ToString() + ".png";
                        var path = Path.Combine(Server.MapPath("~/Uploads/"));
                        image.Save("~/Uploads/" + newPhoto);
                        prphoto.ImageName = "/Uploads/" + newPhoto;
                    }
                     }
                      }

Результат отладки:

enter image description here

1 Ответ

0 голосов
/ 29 мая 2020

Я решил это, изменив код, как показано ниже. Но я не уверен, безопасно ли это. Пока работает нормально.

   string base64 = file.Substring(file.IndexOf(',') + 1);
   base64 = base64.Trim('\0');
   string fileName = Guid.NewGuid().ToString() + ".Jpeg";
   byte[] imageBytes = Convert.FromBase64String(base64);
   MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
   ms.Write(imageBytes, 0, imageBytes.Length);
   System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
    image.Save(Server.MapPath("~/Uploads/"+fileName), 
    System.Drawing.Imaging.ImageFormat.Png);
    prphoto.ImageName = "/Uploads/" + fileName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...