aboutsummaryrefslogtreecommitdiffstats
path: root/lib/upload.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/upload.js')
-rw-r--r--lib/upload.js43
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) {