ImageUploader/index.js

82 lines
2.3 KiB
JavaScript

import express from 'express';
import fs from 'fs';
import multer from "multer";
import path from 'path';
import crypto from 'crypto';
import blueutilities from 'blueutilities';
const __dirname = path.resolve();
const app = express();
app.use(multer().single("file"))
// body-parser
// app.use(express.raw({limit: '100mb',type: 'application/octet-stream'}));
// app.use(express.urlencoded({ extended: false }));
// app.use(express.urlencoded({extended: false, limit: '5mb'}));
if(!fs.existsSync('uploads')) {
fs.mkdirSync('uploads');
}
app.get("/", (req, res) => {
res.send("helo")
})
app.get('/:name', (req, res) => {
if(req.headers['user-agent'].toLowerCase().includes("discord")) {
res.header("facts", "tencent is crab").redirect("/i/" + req.params.name); // discord trolling
// (redirects discord to the full image url)
}
if(blueutilities.random.numBetween(0, 100) == 68) {
res.send("Among");
}
res.send(`
<script>
const red = {
crab() {
console.log("E")
},
isCrab() {
return Math.floor(Math.random() * 10) != 5
} // crabs a random amount of time
}
while(red.isCrab()) { // y e s
red.crab();
}
</script>
`);
});
app.post('/upload', (req, res) => {
// save file with a randomized name and send back the name to the client
// so that the client can use the name to retrieve the file
let fileName;
while(!fileName || fs.existsSync(path.join(__dirname, 'uploads', fileName))) {
fileName = crypto.randomBytes(16).toString("hex") + ".png";
}
const filePath = path.join(__dirname, 'uploads', fileName);
const fileData = req.file.buffer; // try now
fs.writeFile(filePath, fileData, (err) => {
if (err) {
console.log(err);
res.status(500).send('error');
return;
}
res.send({
success: true,
fileName: fileName,
fullURL: `${req.protocol}://${req.headers.host}/${fileName}`
});
});
});
app.use('i', express.static(path.join(__dirname, "uploads")))
app.use((req, res, next) => {
res.status(418).send("418 crab not found");
});
app.listen(3000, () => {
console.log('stupid uploader is run');
});