go - not - image to data url javascript
Convertir blob en imagen en Go (1)
Esto fue un error en el controlador sqlite3. No estaba manejando cadenas que contienen caracteres NUL correctamente. Ahora está arreglado.
Además, los datos no se han insertado correctamente en la base de datos. El tipo de datos para ellos es TEXTO y no BLOB según lo requerido por el esquema. Puede ver esto en el shell sqlite con: SELECT typeof(tile_data) FROM tiles;
. 1
Estoy tratando de crear un servidor mbtiles en Go. El archivo sigue la especificación mbtiles . El campo tile_data
es un BLOB
y estoy tratando de consultar la base de datos y obtener las imágenes correspondientes (almacenadas como tipos de blobs).
Hasta ahora las consultas están bien, pero estoy obteniendo resultados corruptos de tile_data
. No estoy seguro de cómo asignar un BLOB SQLite a una estructura de datos GO adecuada.
Hasta ahora var tileData []byte
intentado usar var tileData []byte
sin éxito después de esta muestra githtiles github . El valor de retorno me da una matriz de solo 4 bytes que sospecho que es un tanto cierto, ya que cuando veo el BLOB como tipo de texto en una GUI de SQLite me da 4 caracteres también (algo así como ÿØÿà
)
Para resumir: The tile_data
es un BLOB (almacenando una imagen) y no puedo obtener una conversión adecuada a una var. ¿Cómo puedo convertir un BLOB en Image in Go?
ACTUALIZAR:
Los caracteres ÿØÿà
son 0xFF 0xD8 0xFF 0xE0
que de hecho son el inicio del archivo JPEG. Estoy usando el mismo archivo MBTile que utilizo en una aplicación de iOS a través del SDK de Mapbox iOS, por lo que el archivo no está dañado y realmente puedo ver las imágenes BLOB usando una GUI de SQLite. La especificación MBTiles dice que el campo es de tipo BLOB, y de hecho, ese es el tipo de campo que estoy usando. Nuevamente, la base de datos está bien, es la misma que usa una aplicación externa de iOS. Incluso puedo consultar otros datos con éxito.
Por contexto, este es mi código aislado.
func TilesHandler(w http.ResponseWriter, r *http.Request) {
db, _ := sql.Open("sqlite3", "./mapSource.mbtiles")
defer db.Close()
rows, _ := db.Query("SELECT tile_data FROM tiles WHERE zoom_level = 10 AND tile_column = 309 AND tile_row = 569")
defer rows.Close()
var tileData []byte
for rows.Next() {
rows.Scan(&tileData)
}
w.Write(tileData)
}
El zoom y las coordenadas están codificados para simplificar. tiledata
devuelve los 4 bytes mencionados.
ACTUALIZACIÓN 2: Aquí está el resultado de un registro específico de la tabla de fichas. Tenga en cuenta que el campo tile_data
es un BLOB y en la parte inferior, la GUI muestra 4 caracteres. Esa es la exacta que estoy recibiendo en la matriz de []byte
en mi código Go.
Entonces mi pregunta es: tengo este archivo de imagen BLOB en mi base de datos, que es una imagen JPEG. ¿Cómo lo leo y lo muestro como una imagen en mi página web? Quiero leer ese BLOB y devolver una imagen en mi solicitud http.
Muestra de fila de azulejos:
Tipos de campos de azulejos