From c0cd0a12924f94d2b6860ccbb42bde858ca410a7 Mon Sep 17 00:00:00 2001 From: nbitzz <77242831+nbitzz@users.noreply.github.com> Date: Thu, 26 Jan 2023 17:56:51 -0800 Subject: [PATCH] switch to streams --- src/index.ts | 10 ++++++---- src/lib/files.ts | 22 +++++++++++++++++----- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index 7b68a27..694ef29 100644 --- a/src/index.ts +++ b/src/index.ts @@ -59,7 +59,7 @@ app.get("/", function(req,res) { .replace(/\$UploadButtonText/g,"Upload file") .replace(/\$otherPath/g,"/clone") .replace(/\$otherText/g,"clone from url...") - .replace(/\$FileNum/g,Object.keys(files).length.toString()) + .replace(/\$FileNum/g,Object.keys(files.files).length.toString()) ) }) }) @@ -75,7 +75,7 @@ app.get("/clone", function(req,res) { .replace(/\$UploadButtonText/g,"Input a URL") .replace(/\$otherPath/g,"/") .replace(/\$otherText/g,"upload file...") - .replace(/\$FileNum/g,Object.keys(files).length.toString()) + .replace(/\$FileNum/g,Object.keys(files.files).length.toString()) ) }) }) @@ -104,10 +104,11 @@ app.post("/clone",(req,res) => { res.send("[err] invalid url") } axios.get(j.url,{responseType:"arraybuffer"}).then((data:AxiosResponse) => { - uploadFile({name:req.body.split("/")[req.body.split("/").length-1] || "generic",mime:data.headers["content-type"],uploadId:j.uploadId},Buffer.from(data.data)) + files.uploadFile({name:req.body.split("/")[req.body.split("/").length-1] || "generic",mime:data.headers["content-type"],uploadId:j.uploadId},Buffer.from(data.data)) .then((uID) => res.send(uID)) .catch((stat) => {res.status(stat.status);res.send(`[err] ${stat.message}`)}) }).catch((err) => { + console.log(err) res.status(400) res.send(`[err] failed to fetch data`) }) @@ -134,7 +135,8 @@ app.get("/file/:fileId",async (req,res) => { let f = await files.readFileStream(req.params.fileId) res.setHeader("Content-Type",f.contentType) - f.pipe(res) + res.status(200) + f.dataStream.pipe(res) }) app.get("/server",(req,res) => { diff --git a/src/lib/files.ts b/src/lib/files.ts index 61ccf0e..b6f1be4 100644 --- a/src/lib/files.ts +++ b/src/lib/files.ts @@ -57,7 +57,7 @@ export default class Files { }) }) - readFile(__dirname+"/../.data/files.json",(err,buf) => { + readFile(process.cwd()+"/.data/files.json",(err,buf) => { if (err) {console.log(err);return} this.files = JSON.parse(buf.toString() || "{}") }) @@ -143,21 +143,22 @@ export default class Files { } // save + console.log("writing") - return this.writeFile( + resolve(await this.writeFile( uploadId, { filename:settings.name, messageids:msgIds, mime:settings.mime } - ) + )) }) } // fs - writeFile(uploadId: string, file: FilePointer):Promise { + writeFile(uploadId: string, file: FilePointer):Promise { return new Promise((resolve, reject) => { this.files[uploadId] = file @@ -169,6 +170,8 @@ export default class Files { delete this.files[uploadId]; return } + + console.log("written") resolve(uploadId) @@ -189,7 +192,9 @@ export default class Files { if (this.files[uploadId]) { let file = this.files[uploadId] - let dataStream = new Readable() + let dataStream = new Readable({ + read(){} + }) resolve({ contentType: file.mime, @@ -206,11 +211,14 @@ export default class Files { dataStream.push(d.data) } else { reject({status:500,message:"internal server error"}) + dataStream.destroy(new Error("file read error")) return } } } } + + dataStream.push(null) } else { reject({status:404,message:"not found"}) @@ -234,4 +242,8 @@ export default class Files { }) } + getFilePointer(uploadId:string):FilePointer { + return this.files[uploadId] + } + } \ No newline at end of file