1

~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を参照してください。

4

1 に答える 1