基于SQL查询提供媒体的Datasette插件
项目描述
datasette-media
Datasette插件,用于基于SQL查询提供媒体。
当您有一个包含对磁盘上文件引用的数据库表 - 或存储在BLOB列中的二进制内容 - 并且希望将其提供给用户时,请使用此插件。
安装
在Datasette相同的环境中安装此插件。
$ pip install datasette-media
HEIC图像支持
现代iPhone使用HEIC图像格式保存其照片。处理这些图像需要额外的依赖项,pyheif。您可以通过运行以下命令包含此依赖项
$ pip install datasette-media[heif]
用法
您可以使用此插件配置Datasette,根据对底层数据库表的SQL查询提供静态媒体。
媒体将通过以 /-/media/
开头的URL提供服务。每个媒体资源的完整URL将如下所示
/-/media/type-of-media/media-key
type-of-media
将对应于配置的SQL查询,可能是 photo
。 media-key
将是一个用作底层SQL查询的一部分的标识符,用于找到应提供的文件。
从磁盘提供静态文件
以下 metadata.json
配置将使此插件根据对名为 apple_photos
的数据库表的查询提供文件。
{
"plugins": {
"datasette-media": {
"photo": {
"sql": "select filepath from apple_photos where uuid=:key"
}
}
}
}
对 /-/media/photo/CF972D33-5324-44F2-8DAE-22CB3182CD31
的请求将执行以下SQL查询
select filepath from apple_photos where uuid=:key
URL中的值 - 在这种情况下为 CF972D33-5324-44F2-8DAE-22CB3182CD31
- 将作为 :key
参数传递给查询。
查询返回一个已从表中读取的 filepath
值。然后插件将从磁盘读取该文件,并在请求中提供它。
SQL查询默认运行在第一个已连接的数据库上。您可以使用"database": "name_of_db"
指定不同的数据库来执行查询。要针对photos.db
执行,使用以下方法
{
"plugins": {
"datasette-media": {
"photo": {
"sql": "select filepath from apple_photos where uuid=:key",
"database": "photos"
}
}
}
}
请参阅dogsheep-photos,了解可以利用此插件的应用程序示例。
从BLOB列服务二进制内容
如果您的SQL查询返回一个content
列,则该列将直接服务于用户
{
"plugins": {
"datasette-media": {
"photo": {
"sql": "select thumbnail as content from photos where uuid=:key",
"database": "thumbs"
}
}
}
}
您还可以返回一个content_type
列,该列将用作服务于用户的Content-Type
标题
{
"plugins": {
"datasette-media": {
"photo": {
"sql": "select body as content, 'text/html;charset=utf-8' as content_type from documents where id=:key",
"database": "documents"
}
}
}
}
如果您没有指定content_type
,则默认使用application/octet-stream
。
从URL代理服务内容
要服务从其他地方获取的内容,返回一个content_url
列。这在与下一节中描述的调整图像大小功能结合使用时特别有用。
{
"plugins": {
"datasette-media": {
"photos": {
"sql": "select photo_url as content_url from photos where id=:key",
"database": "photos",
"enable_transform": true
}
}
}
}
现在您可以通过以下方式访问该URL的调整大小后的图像版本
/-/media/photos/13?w=200
设置下载文件名
可以通过返回content_filename
列来强制浏览器使用特定文件名下载内容。
{
"plugins": {
"datasette-media": {
"hello": {
"sql": "select 'Hello ' || :key as content, 'hello.txt' as content_filename"
}
}
}
}
访问/-/media/hello/Groot
将导致您的浏览器下载一个名为hello.txt
的文件,其中包含文本Hello Groot
。
调整或转换图像
您的SQL查询可以通过返回额外的列来指定图像应调整大小和/或转换为其他格式。这三个都是可选的。
resize_width
- 调整图像到的高度resize_height
- 调整图像到的高度output_format
- 要使用的输出格式(例如jpeg
或png
) - 允许使用任何由Pillow支持的输出格式。
如果指定了其中一个但未指定另一个resize_width
或resize_height
,则未指定的一个将自动计算以保持图像的纵横比。
以下是一个配置示例,将所有图像调整为高度为200像素的JPEG格式
{
"plugins": {
"datasette-media": {
"photo": {
"sql": "select filepath, 200 as resize_height, 'jpeg' as output_format from apple_photos where uuid=:key",
"database": "photos"
}
}
}
}
如果您启用enable_transform
配置选项,您可以在运行时使用查询字符串参数指定转换参数。例如
/-/media/photo/CF972D33?w=200
调整到固定宽度/-/media/photo/CF972D33?h=200
调整到固定高度/-/media/photo/CF972D33?format=jpeg
转换为JPEG
该选项添加方式如下
{
"plugins": {
"datasette-media": {
"photo": {
"sql": "select filepath from apple_photos where uuid=:key",
"database": "photos",
"enable_transform": true
}
}
}
}
允许的最大高度或宽度为4000像素。您可以使用"max_width_height"
选项更改此限制。
{
"plugins": {
"datasette-media": {
"photo": {
"sql": "select filepath from apple_photos where uuid=:key",
"database": "photos",
"enable_transform": true,
"max_width_height": 1000
}
}
}
}
配置
除了不同的命名内容类型外,还提供了以下特殊插件配置设置
transform_threads
- 用于运行转换(例如调整大小)的线程数。默认为4。
这可以按如下方式使用
{
"plugins": {
"datasette-media": {
"photo": {
"sql": "select filepath from apple_photos where uuid=:key",
"database": "photos"
},
"transform_threads": 8
}
}
}
项目详情
下载文件
为您的平台下载文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
datasette-media-0.5.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fcfea1a6eef9efb0acd02a1ff3f144cf494459c266a94c940497c559547b18cc |
|
MD5 | 64c8077c98ca1f0529b73b02d3ce3b6c |
|
BLAKE2b-256 | 4cdd02b0e307b8ab862d614a758342d76a9edbf9bc13e65a38b70ba17f867d71 |
datasette_media-0.5.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 94b2665aac04b72c46f2a25fe79d44727ecdff03b360d8b5b4178304055b16da |
|
MD5 | e18ca506e75433ba937b735e09f3141c |
|
BLAKE2b-256 | 44b165f7188c000cda7dd81d7bd5cfc42c553ad5dfb212426843f245694cc514 |