Pregunta

Estoy intentando cargar una imagen en MySQL usando Play Framework2.

En Play Framework 1.24, uso "play.db.jpa.Blob" y "multipart/form-data" para subir una imagen al mySQL.

Pero en el marco de juego 2 no hay Blob...¿Cómo puedo subir la imagen usando "multipart/form-data" a mySQL?

¿Fue útil?

Solución

Definitivamente deberías no almacenamiento sus archivos a una base de datos.Esa es una mala idea.En su lugar, debe cargar sus archivos en algún sistema de archivos local o distante y solo guardar el nombre del archivo/la ruta del archivo en su base de datos.

EDITAR : Dado que mi respuesta fue rechazada, intentaré dar un poco más de explicación:

  1. En primer lugar, cuando trabaje con tipos de Blob en el marco de Play, se creará un campo BLOB en su base de datos.Pero no todas las bases de datos tienen la misma implementación detrás del tipo blob.En algunos RDMS, el tipo Blob tendrá almacenamiento limitado y en otros (como MySQL) el tamaño máximo de su campo blob estará determinado por la configuración.

  2. En segundo lugar, cuando recupera sus archivos de la base de datos y los envía al usuario, su uso de memoria se disparará.Simplemente porque Play carga el campo blob en la memoria antes de enviárselo al usuario.

  3. Además, si tiene muchos archivos almacenados en su base de datos, ésta se sobrecargará muy rápidamente.(peticiones).Su próximo paso será mover la base de datos a una nueva máquina.Pero si tiene muchos datos almacenados, su próximo cuello de botella podría no ser la base de datos sino el ancho de banda entre su aplicación y el servidor de la base de datos.

  4. El uso de una base de datos para el almacenamiento de archivos siempre será más lento y consumirá más memoria que la lectura directa del sistema de archivos debido a la sobrecarga creada por la base de datos.

Usar su base de datos como motor de almacenamiento de archivos es una solución fácil y rápida de configurar, pero está llena de inconvenientes que realmente podrían cambiar las cosas más adelante durante su proyecto.

Otros consejos

De otra manera, puedes almacenar referencias a fotos en la base de datos.

En vista:

<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
           Photo<input type="file" name="photo"> <br>
             <input type="submit" value="Submit">    
</form>

En controlador:

MultipartFormData body = request().body().asMultipartFormData();
            FilePart photo = body.getFile("photo");
            if (photo != null) {
                String fileName = photo.getFilename();
                File file = photo.getFile();
                File newFile = new File(play.Play.application().path().toString() + "//public//uploads//"+ "_" + fileName);
                file.renameTo(newFile); //here you are moving photo to new directory          
                System.out.println(newFile.getPath()); //this path you can store in database
            }
}

Esto es lo que el objeto Blob maneja de forma transparente.Almacena el archivo en el sistema de archivos y almacena una referencia en la base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top