我正在尝试在 Go 中创建一个 mbtiles 服务器。该文件遵循mbtiles 规范。该tile_data字段是 a BLOB,我正在尝试查询数据库并获取相应的图像(存储为 blob 类型)。到目前为止,查询还可以,但我得到的tile_data结果已损坏。我不确定如何将 SQLite BLOB 映射到正确的 Go 数据结构。到目前为止,我尝试var tileData []byte按照这个github gombtiles 示例使用但没有成功。返回值让我得到一个只有 4 个字节的数组,我怀疑这有点正确,因为当我在 SQLite GUI 中看到 BLOB 作为文本类型时,它也让我得到 4 个字符(类似于ÿØÿà)总结一下:这tile_data是一个 BLOB(存储图像),我无法正确转换为 Go var。如何在 Go 中将 BLOB 转换为图像?更新:这些ÿØÿà字符0xFF 0xD8 0xFF 0xE0确实是 JPEG 文件的开始。我使用的 MBTile 文件与我通过 Mapbox iOS SDK 在 iOS 应用程序中使用的相同,因此该文件没有损坏,我实际上可以使用 SQLite GUI 看到 BLOB 图像。MBTiles 规范说该字段是 BLOB 类型,实际上,这就是我正在使用的字段类型。同样,数据库很好,与外部 iOS 应用程序使用的数据库相同。我什至可以成功查询其他数据。对于上下文,这是我的孤立代码。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)}为简单起见,缩放和坐标被硬编码。tiledata正在返回提到的 4 个字节。更新 2: 这是tiles 表的一个特定记录的输出。请注意,该tile_data字段是一个 BLOB,并且 GUI 在底部显示 4 个字符。那正是我[]byte在 Go 代码的数组中收到的那个。所以我的问题是:我的数据库中有这个 BLOB 图像文件,它是一个 jpeg 图像。我如何阅读它并将其显示为我的网页中的图像?我想读取那个 BLOB 并在我的 http 请求中返回一个图像。瓷砖行示例:平铺字段类型
1 回答
- 1 回答
- 0 关注
- 187 浏览
添加回答
举报
0/150
提交
取消