¿Cómo guardar imagen en mysql?

Pretendo, mediante un formulario html con un input type file, enviar el archivo al servidor y grabarlo en la base de datos. No tengo muy claro qué tipo de dato envía el formulario al servidor para recogerlo en una propiedad de clase.

5
задан 23.08.2016, 18:42
4 ответа

Ты можешь записывать легко и практически изображение (или другой формат файла) в MySQL как информация BLOB.

Данные BLOB это данные, хранившиеся в цепях байт и позволь мочь сохранять файлы многообразных форматов.

Для того, чтобы у тебя была идея, есть несколько типов данных BLOB в MySQL на основании максимального размера, который они могут хранить:

BLOB = (65,535 байт, 65KB)
MEDIUMBLOB = (16,777,215 байт, 16MB)
LONGBLOB = (4,294,967,295 байт, 4GB)

Я тебе должен код, чтобы мочь превращать изображение в байт, чтобы потом это пересылать в MySQL со Спринг Фрэмеуорк, так как у меня есть этот код, но в VB.NET.

Равно как чтобы это показывать на странице, нужно использовать другой код, чтобы расшифровывать эту цепь байт.

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

4
ответ дан 24.11.2019, 13:35
  public bool grabaimagen(string codigo, PictureBox pb)
    {
        conecta2();
        MySqlCommand cmd = new MySqlCommand("update miembros set foto = @foto where codigo ='"+ codigo + "'",cn2);
        cmd.Parameters.Add("@foto", MySqlDbType.LongBlob);
        MemoryStream ms = new MemoryStream();
        pb.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        cmd.Parameters["@foto"].Value = ms.GetBuffer();
        int resultado = cmd.ExecuteNonQuery();
        cn2.Close();

        if (resultado > 0) { return true; } else { return false; }
    }

    public void verimagen(PictureBox pb, string codigo)
    {
        try
        {
            conecta2();
            MySqlCommand cmd = new MySqlCommand("select foto from miembros where codigo = '" + vcodigo + "'", cn2);
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds, "img");
            byte[] datos = new byte[0];
            DataRow dr = ds.Tables["img"].Rows[0];
            datos = (byte[])dr["foto"];
            MemoryStream ms = new MemoryStream(datos);
            pb.Image = System.Drawing.Bitmap.FromStream(ms);
        }
        catch (Exception)
        {


        }

        cn2.Close();
    }

//, чтобы вводить только, меняет update из-за insert into таблица оцени (поле, поле)//я надеюсь, что оно ты функционирует

0
ответ дан 24.11.2019, 13:35
  • 1
    Привет, желанный в StackOverflow в españ ol, я предлагаю тебе сделать , пробежавший для того, чтобы у тебя была лучшая идея о функционировании страницы, и ты смог представлять твой ответ лучшего способа. Tambié n ты можешь проверять ¿ Có mo я пишу хороший ответ? . Привет. – the-breaker 29.08.2019, 04:26

Самое работоспособное состоит в том, чтобы ты не сохранял как таковое изображение, а ссылку в нее. Так ты можешь создавать поле типа VARCHAR, который назывались бы "соединение", и в хранить маршрут до изображения, например "/img/imagen1.jpg" Маршрут был бы касающейся рукописного шрифта, где загружается изображение.

Как результат query ты будешь должен помещать результат поля в Такой tag в PHP он был бы немного как

$sql = "select link from tabla";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

    while($row = $result->fetch_assoc()) {
        echo "<img src='".$row["link"]."' >";
    }
}
$conn->close();

привет

-1
ответ дан 24.11.2019, 13:35
  • 1
    Привет Джос и # 233; твой ответ est и # 225; спусковые салазки в php, взамен на вопрос приклеили этикетку как spring-mvc , что java, привет. – HCarrasko 22.08.2016, 21:26
  • 2
    но OP est и # 225; прося, как делание этого в spring и в базе данных. – Alan 22.08.2016, 21:29
  • 3
    Это верно, не я hab и # 237; в отчитанный. Это первый раз, что я соглашаюсь на среду. Спасибо tambi и # 233; n из-за edici и # 243; n c и # 243; я говорю – José Gómez Castaño 22.08.2016, 21:31

Он пытается с этим:

   public static void main(String[] args) throws Exception, IOException, SQLException {
    Class.forName("org.gjt.mm.mysql.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/databaseName", "usuario", "password");
    String sqlQuery = "insert into tu_tabla(campo_foto) values ( ?)";

    FileInputStream fis = null;
    PreparedStatement ps = null;
    try {
      conn.setAutoCommit(false);
      File archivo = new File("myPhoto.png");
      fis = new FileInputStream(archivo);
      ps = conn.prepareStatement(sqlQuery);
      ps.setBinaryStream(1, fis, (int) file.length());
      ps.executeUpdate();
      conn.commit();
    } finally {
      ps.close();
      fis.close();
    }
  }
-1
ответ дан 24.11.2019, 13:35
  • 1
    Привет user12717. Пожалуйста предложи м и # 225; s detales на из-за qu и # 233; этот c и # 243; я говорю, что он решит проблему. –  22.08.2016, 22:29
  • 2
    Привет, я coloqu и # 233; ответ, что est и # 225; внизу на ввождении BLOB в основании. Если ты хочешь podr и # 237; схвати помогать издавая мой ответ и размещая c и # 243; я говорю в framework Java, чтобы это делать! – Agustin M. 23.08.2016, 22:27
  • 3
    @AgustinM. это не ответ v и # 225; lida и не только, потому что он ничего не объясняет, а потому что он принимает, что файл est и # 225; получая диска вместо того, чтобы это получать с informaci и # 243; n формуляра html. –  24.08.2016, 20:26
  • 4
    Я понимаю Luiggi. Я одинокий комментировал, что, если имей, и # 237; в c и # 243; я говорю правильный pod и # 237; чтобы это вносить в мой ответ. Я не знаю на этом framework и как я это делаю точно. – Agustin M. 24.08.2016, 21:33