diff options
Diffstat (limited to 'lib/upload.js')
| -rw-r--r-- | lib/upload.js | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/lib/upload.js b/lib/upload.js index dc311922..5a91caa4 100644 --- a/lib/upload.js +++ b/lib/upload.js @@ -6,8 +6,9 @@ import path from "path"; import sharp from "sharp"; import { pipeline } from "stream"; import { g, s, db } from "$lib/db"; -import { fail } from "$lib/utils"; +import { bail, fail } from "$lib/utils"; import crypto from "crypto"; +import { err } from "$lib/logging"; async function getSha256Hash(stream) { return new Promise((resolve, reject) => { @@ -28,30 +29,38 @@ async function getSha256Hash(stream) { } export default async (req, res) => { - let { - params: { type }, - } = req; + try { + let { + params: { type }, + } = req; - let width = type === "banner" ? 1920 : 240; + let width = type === "banner" ? 1920 : 240; - let data = await req.file(); - let s1 = new Clone(data.file); - let s2 = new Clone(data.file); + let data = await req.file(); + let s1 = new Clone(data.file); + let s2 = new Clone(data.file); - let [format, ext] = (await fileTypeFromStream(s1)).mime.split("/"); + let [format, ext] = (await fileTypeFromStream(s1)).mime.split("/"); - if (format !== "image" && !["jpg", "jpeg", "png"].includes(ext)) - fail("unsupported file type"); + if (format !== "image" && !["jpg", "jpeg", "png"].includes(ext)) + fail("unsupported file type"); - let t = sharp().rotate().resize(width).webp(); + let t = sharp().rotate().resize(width).webp(); - let processedBuffer = await streamToBuffer(s2.pipe(t)); - let hash = crypto.createHash("sha256").update(processedBuffer).digest("hex"); + let processedBuffer = await streamToBuffer(s2.pipe(t)); + let hash = crypto + .createHash("sha256") + .update(processedBuffer) + .digest("hex"); - let filePath = `/app/data/uploads/${hash}.webp`; - fs.writeFileSync(filePath, processedBuffer); + let filePath = `/app/data/uploads/${hash}.webp`; + fs.writeFileSync(filePath, processedBuffer); - res.send({ hash }); + res.send({ hash }); + } catch (e) { + err("problem uploading", e.message); + bail(res, e.message); + } }; function streamToBuffer(stream) { |
