~100 個の JPEG (それぞれ 24K ~ 100K) を PostgreSQL のテーブルにbytea列として格納します。タグ src 属性は<img/>
SvelteKit エンドポイントを参照します。
<img src="/api/file/18.json" alt="Person"/>
このエラーの取得:
ルート /api/file/76.json からの無効な応答: Uint8Array 本体には content-type: application/octet-stream ヘッダーを添付する必要があります
export async function get({ params }) {
const { id } = params
const sql = `SELECT _id, name, type, data FROM files WHERE _id = $1;`
const { rows } = await db.query(sql, [id])
const file = rows[0]
return {
headers: {
'Content-disposition': `attachment; filename=${file.name}`,
'Content-type': file.type
},
body: file.data
}
}
SvelteKitエンドポイントは、特定のプラットフォームでのみ使用可能な req/res オブジェクトと対話しないため、bytea 値をストリームとして応答オブジェクトに書き出すことはできませんが、正しいアプローチが何であるかはわかりません。 .
このSQL文も試してみました...
SELECT _id, name, type, encode(data, 'base64') as data FROM files WHERE _id = $1;
しかし、それは役に立ちませんでした。
何かご意見は?
更新: この問題は SvelteKit のバグに関連している可能性があります - https://github.com/sveltejs/kit/issues/1438を参照してください。