milepredy Ответов: 3

Сохраните изображение загруженное в picturebox в mysqldatabase в виде байтов


Я пытаюсь правильно сохранить изображение, которое будет загружено Пользователем в picturebox и должно быть сохранено в базе данных после нажатия кнопки Сохранить.

в приведенной ниже строке кода говорится, что image1 не содержит определения для сохранения.
Image1.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                    data = ms.ToArray();


Что я уже пробовал:

//это мой код для загрузки изображения в picturebox, который является (image1)

{
               string folderPath = Server.MapPath("~/Files/");

               //Check whether Directory (Folder) exists.
               if (!Directory.Exists(folderPath))
               {
                   //If Directory (Folder) does not exists Create it.
                   Directory.CreateDirectory(folderPath);
               }

               //Save the File to the Directory (Folder).
               FileUpload1.SaveAs(folderPath + Path.GetFileName(FileUpload1.FileName));

               //Display the Picture in Image control.
               Image1.ImageUrl = "~/Files/" + Path.GetFileName(FileUpload1.FileName);
           }


//это базовый код, который я пытался вставить в базу данных

try
          {

              byte[] data;
              using (MemoryStream ms = new MemoryStream())
              {
                  Image1.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                  data = ms.ToArray();
              }
              {

              using (MySqlConnection con = new MySqlConnection(myconstring))
                  {
                      con.Open();
                      using (MySqlCommand command = new MySqlCommand("INSERT INTO image (picture) VALUES (@IM)", con))
                      {
                          command.Parameters.AddWithValue("@IM", data);
                          command.ExecuteNonQuery();
                      }
                  }
              }


//это мой код для выбора изображения из базы данных для отображения в поле picture, который отлично работает, когда я вставляю изображение непосредственно в базу данных, а не с веб-страницы.

byte[] bytes = (byte[])command.ExecuteScalar();

             string strBase64 = Convert.ToBase64String(bytes);

             if (strBase64 != null)
             {
                 prvimage.ImageUrl = "data:Image/png;base64," + strBase64;
             }
             else
             {
                 Response.Write("Must upload an Image");
             }

3 Ответов

Рейтинг:
1

Richard Deeming

То Image контроль[^] не содержит а Save метод. Но вам он не нужен - он отображает изображение с диска вашего сервера.

string fileName = Server.MapPath(Image1.ImageUrl);
if (string.IsNullOrEmpty(fileName))
{
    // TODO: Display an error to the user
    return;
}

byte[] data = File.ReadAllBytes(fileName);

using (MySqlConnection con = new MySqlConnection(myconstring))
using (MySqlCommand command = new MySqlCommand("INSERT INTO image (picture) VALUES (@IM)", con))
{
    command.Parameters.AddWithValue("@IM", data);
    
    con.Open();
    command.ExecuteNonQuery();
}
NB: Вам нужно будет проверить, что загруженный файл на самом деле является изображением. Вы также захотите проверить, что имя файла, предоставленное пользователем, не содержит символов, которые недопустимы в имени файла Windows. Никогда не доверяйте вводу пользователя! :)


milepredy

Огромное спасибо.

Рейтинг:
1

OriginalGriff

Нет, это не сработает.: Почему я получаю "параметр не является допустимым." исключение, когда я читаю изображение из своей базы данных?[^] - это точно такая же проблема, как и у вас, за исключением того, что вам нужно будет преобразовать массив байтов в строку Base64, прежде чем вы сохраните его.


milepredy

Я был на этой странице, вы даже можете сказать по аналогичным параметрам. Это не работает для меня, так как я получаю ошибку с
рис1.Сохранить(МС, система.Рисование.Изображений.ImageFormat.Bmp);
данные = МС.Метод toArray();

который говорит, что image1 не содержит определения для сохранения.

milepredy

решение на этой странице - одно из многих решений, которые я пробовал.
большинство решений-это настольные приложения. Это веб-приложение...

Рейтинг:
1

ramod kaushan

SqlCommand cmd = new SqlCommand(") values()", cnn);
                cmd.CommandType = CommandType.Text;

 cnn.Open();

if (pictureFace.Image != null)
                    {
                        ms = new MemoryStream();
                        pictureFace.Image.Save(ms, ImageFormat.Jpeg);
                        byte[] photo_aray = new byte[ms.Length];
                        ms.Position = 0;
                        ms.Read(photo_aray, 0, photo_aray.Length);
                        cmd.Parameters.AddWithValue("@Image", photo_aray);
                    }
                    
                    cmd.ExecuteNonQuery();
}


milepredy

Огромное спасибо.