PDA

Ver la versión completa : PHP Como guardar una imagen BLOB generada en JS???



anakinmay
28/12/2016, 10:54
El tema es que genero una imagen blob de este tipo:
blob:http://..../c9c56b36-6f29-4a8b-ad4d-94a58d512200

Bien, al intentar descargarla del navegador ya me la ofrece con extensión jpg.

El tema es que necesito guardarlas en el servidor y no se como **** lo puedo hacer.

La imagen la genero después de una captura de pantalla e incrusto el link en la página con javascript, pero a la hora de guardarlo en el servidor no tengo ni idea de como hacerlo.

Necesito ayuda!!!!! Help!!!!!

:loco:

josepzin
28/12/2016, 11:25
Yo ni idea...

otto_xd
28/12/2016, 11:48
El tema es que genero una imagen blob de este tipo:
blob:http://..../c9c56b36-6f29-4a8b-ad4d-94a58d512200

Bien, al intentar descargarla del navegador ya me la ofrece con extensión jpg.

El tema es que necesito guardarlas en el servidor y no se como **** lo puedo hacer.

La imagen la genero después de una captura de pantalla e incrusto el link en la página con javascript, pero a la hora de guardarlo en el servidor no tengo ni idea de como hacerlo.

Necesito ayuda!!!!! Help!!!!!

:loco:

Si has generado el blob posiblemente puedas generar una imagen a partir de el, y mediante una llamada post enviarla al servidor.

Incluso es posible que puedas enviar el array de bytes como blob y guardarlo como imagen en el servidor sin mas

http://www.w3schools.com/php/php_file_upload.asp

Super guarramente
http://stackoverflow.com/questions/13333378/how-can-javascript-upload-a-blob

Obviamente tu servidor php requiere que generes un endpoint para los form, de forma que puedas hacer la subdia

anakinmay
28/12/2016, 12:32
Estoy usando el servidor del instituto y no se yo como estará.

Ni si quier a me deja usar imagegrabscreen() ; me da error:

Fatal error: Call to undefined function imagegrabscreen()

Igual intento guardar las imagenes en la base de datos, espero que no me de problemas. Lo veis factible?? Será más fácil??

anakinmay
28/12/2016, 17:03
La consola me lanza esto al conectar con el servidor:

test.jpg<br />
<b>Warning</b>: fopen(test.jpg): failed to open stream: Permission denied in <b>/hosting/distancia/2016/rvaldivieso/www/php/conexion/guardarImagen.php</b> on line <b>11</b><br />
<br />
<b>Warning</b>: fwrite() expects parameter 1 to be resource, boolean given in <b>/hosting/distancia/2016/rvaldivieso/www/php/conexion/guardarImagen.php</b> on line <b>12</b><br />
<br />
<b>Warning</b>: fclose() expects parameter 1 to be resource, boolean given in <b>/hosting/distancia/2016/rvaldivieso/www/php/conexion/guardarImagen.php</b> on line <b>13</b><br />

Supongo que estará capado o lago para subir archivos??

otto_xd
28/12/2016, 17:33
Supongo que tienes que tener permisos de escritura para poder almacenar las imagenes.

Sobre lo de almacenarlas en una base de datos... supongo que no es el uso mas apropiado para una base de datos...

Para evitar lios prueba en una maquina virtual, que hoy tienes virtualbox + docker o vagrant para montarlas en cuestion de minutos

ElRana
28/12/2016, 21:53
Te cuento cómo hacerlo en LAMP con BLOBs (Binary Large Objects).
Un BLOB es un campo de 64KB de longitud máxima, para guardar imágenes necesitarás trocearlas en paquetes de 64KB a fin de almacenarlas.
Para ello, usa SHA1 de PHP en el lado del servidor para hacer los trozos, cada trozo tiene una suma SHA1 asociada de forma que cuando desde el cliente se solicite la imagen, el flujo se reconstruya en sucesivas llamadas a la BBDD.
Almacenar información en una BBDD es una buena práctica si se trata de contenidos clasificables que se van a consultar a menudo y actualizar de tarde en tarde o nunca, no obstante, usarlo como sustituto de un servidor FTP no es una buena idea.

Precisamente, eso mismo lo hice en mis tiempos de Grado PhylDoc, pero te adelanto que esto se hace en el lado del servidor.
Vamos, que si no puedes meterle "mano" al servidor, olvídate.

otto_xd
29/12/2016, 01:23
Te cuento cómo hacerlo en LAMP con BLOBs (Binary Large Objects).
Un BLOB es un campo de 64KB de longitud máxima, para guardar imágenes necesitarás trocearlas en paquetes de 64KB a fin de almacenarlas.
Para ello, usa SHA1 de PHP en el lado del servidor para hacer los trozos, cada trozo tiene una suma SHA1 asociada de forma que cuando desde el cliente se solicite la imagen, el flujo se reconstruya en sucesivas llamadas a la BBDD.
Almacenar información en una BBDD es una buena práctica si se trata de contenidos clasificables que se van a consultar a menudo y actualizar de tarde en tarde o nunca, no obstante, usarlo como sustituto de un servidor FTP no es una buena idea.

Precisamente, eso mismo lo hice en mis tiempos de Grado PhylDoc, pero te adelanto que esto se hace en el lado del servidor.
Vamos, que si no puedes meterle "mano" al servidor, olvídate.

https://developer.mozilla.org/en-US/docs/Web/API/Blob

ElRana
29/12/2016, 22:17
https://developer.mozilla.org/en-US/docs/Web/API/Blob

Buena literatura, pero no responde a su pregunta.
Esto es mejor:
https://drive.google.com/open?id=0B5Sk6DNEgmAsbzV4WW1TS3k4N2M
Saludos.

otto_xd
29/12/2016, 22:24
Buena literatura, pero no responde a su pregunta.
Esto es mejor:
https://drive.google.com/open?id=0B5Sk6DNEgmAsbzV4WW1TS3k4N2M
Saludos.

Me refiero a que son BLOBs en la parte frontal, no en la parte backend.

Si tienes la imagen puedes subirla al servidor con un form, no tienes que hacer nada mas.

ElRana
29/12/2016, 23:56
Un BLOB es un objeto binario del servidor de BBDD, pertenece a la parte backend. Cuando subo los objetos en el ejemplo PHP, si no recuerdo mal, lo hago en crudo, tal cual. Sólo hay que realizar una sencilla conversión y el conveniente troceo, sea imagen, datos en crudo (para subir zip, rar, etc...) o lo que sea.
Se preparan en el lado del servidor (2ª capa) para pasarla al servidor de BDD (3ra capa) procedentes del lado del cliente.

Estopero
30/12/2016, 01:11
Un BLOB es un objeto binario del servidor de BBDD, pertenece a la parte backend. Cuando subo los objetos en el ejemplo PHP, si no recuerdo mal, lo hago en crudo, tal cual. Sólo hay que realizar una sencilla conversión y el conveniente troceo, sea imagen, datos en crudo (para subir zip, rar, etc...) o lo que sea.
Se preparan en el lado del servidor (2ª capa) para pasarla al servidor de BDD (3ra capa) procedentes del lado del cliente.

Un BLOB es un objeto binario "grande", punto, puede ser de base de datos, de código de backend o de código de frontend.

En cualquier caso, en mi opinión la dirección correcta es la que está marcando otto_xd, generas el blob en JS y luego lo mandas como imagen al backend para almacenarla EN DISCO del servidor (o en un CDN o en donde sea físicamente), o mandas el binario como tal a servidor y lo conviertes y almacenas como imagen allí.

Por favor, imágenes y binarios en base de datos no, es una de las peores prácticas que existen, en base de datos únicamente el path (relativo al proyecto) a la imagen/binario en disco, reduces el tamaño de la base de datos, agilizas los backups, aumentas el rendimiento tanto de la base de datos al ser más compacta como de la aplicación al no tener que hacer llamadas a base de datos para servirlas...

Saludos!

ElRana
30/12/2016, 11:59
BLOB es un tipo de campo de BBDD cuyas siglas responden a Binary Large OBject.
Las BBDD también se respaldan, por lo que almacenar datos binarios en una DB no ralentizará casi nada.
Lo de código backend o frontend, sinceramente, creo que te estas liando entre la abstracción de una interfaz y el tipo de datos de las BBDD.
Yo os digo que subir ficheros de imágenes, zip, rar, pdf, etc... a una DB lo he hecho sin problemas. El único al que puteas de lo lindo es al procesador, eso sí.
No os liéis con abstracciones de frameworks JS. Además, esos framworks JS son para que el servidor los incorpore a la página que le pasa al cliente, no para que el cliente los ejecute sin mas, como si fuera esto JAVA, C o Pascal, por ejemplo.

En cuanto a lo poner imágenes en un servidor FTP o en un servidor de BBDD, a gusto de cada uno.
Cada opción tiene sus pros y sus contras.

Saludos y... happy coding!!

otto_xd
30/12/2016, 13:59
Un BLOB es un objeto binario del servidor de BBDD, pertenece a la parte backend. Cuando subo los objetos en el ejemplo PHP, si no recuerdo mal, lo hago en crudo, tal cual. Sólo hay que realizar una sencilla conversión y el conveniente troceo, sea imagen, datos en crudo (para subir zip, rar, etc...) o lo que sea.
Se preparan en el lado del servidor (2ª capa) para pasarla al servidor de BDD (3ra capa) procedentes del lado del cliente.

Como resumen me puedes comer el rabo.

Para lo demas releete todo lo que he puesto, lumbreras.

ElRana
30/12/2016, 17:16
Como resumen me puedes comer el rabo.

Para lo demas releete todo lo que he puesto, lumbreras.

Mejor mira el código fuente que he puesto, que hace exactamente eso, "lumbreras".

JoJo_ReloadeD
30/12/2016, 17:57
ElRana, no toques la moral. Antes de que te saltaran te han intentado explicar que un blob no solo es un tipo de datos de una bbdd, y tu don erre que erre.

Eskema
02/01/2017, 08:30
Las BBDD también se respaldan, por lo que almacenar datos binarios en una DB no ralentizará casi nada.

En cuanto a lo poner imágenes en un servidor FTP o en un servidor de BBDD, a gusto de cada uno.
Cada opción tiene sus pros y sus contras.




Claaaro que si.... no hay nada mejor que poner en la DB las imagenes y las isos y demas mierdas que pesan un huevo, total se respaldan. Asi cuando indexe gigas de m1erda pura por imagenes y datos que deberian estar fuera pues flipamos con la agilidad de respuesta xD

En resumen, meter imagenes o videos en una DB es la peor practica del mundo mundial y eso es indiscutible xD