E-Mail PDF-Downloads als Binärdaten stabilisieren
KI-AGENT: Attachment-Downloads werden im Backend explizit als Buffer mit Content-Length ausgeliefert und im Frontend aus einem ArrayBuffer als Blob erzeugt, damit PDF-Anhänge unverändert gespeichert werden.
This commit is contained in:
@@ -668,7 +668,9 @@ export function emailSyncService(server: FastifyInstance) {
|
||||
return {
|
||||
filename: attachment.filename || row.attachment.filename || "anhang",
|
||||
contentType: attachment.contentType || row.attachment.contentType || "application/octet-stream",
|
||||
content: attachment.content,
|
||||
content: Buffer.isBuffer(attachment.content)
|
||||
? attachment.content
|
||||
: Buffer.from(attachment.content),
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
|
||||
@@ -466,9 +466,16 @@ export default async function emailAsUserRoutes(server: FastifyInstance) {
|
||||
|
||||
if (!attachment) return reply.code(404).send({ error: "Anhang nicht gefunden" })
|
||||
|
||||
reply.header("Content-Type", attachment.contentType)
|
||||
reply.header("Content-Disposition", `attachment; filename="${attachment.filename.replace(/"/g, "")}"`)
|
||||
return reply.send(attachment.content)
|
||||
const buffer = Buffer.isBuffer(attachment.content)
|
||||
? attachment.content
|
||||
: Buffer.from(attachment.content)
|
||||
const filename = attachment.filename.replace(/["\r\n]/g, "")
|
||||
|
||||
reply.header("Content-Type", attachment.contentType || "application/octet-stream")
|
||||
reply.header("Content-Length", buffer.length)
|
||||
reply.header("Cache-Control", "no-store")
|
||||
reply.header("Content-Disposition", `attachment; filename="${filename}"`)
|
||||
return reply.send(buffer)
|
||||
} catch (err: any) {
|
||||
req.log.error(err)
|
||||
return reply.code(500).send({ error: err.message || "Anhang konnte nicht geladen werden" })
|
||||
|
||||
Reference in New Issue
Block a user