Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const http=require("http"),fs=require("fs");
- const fpath="./store",fdir=fpath+"/dir.json";
- http.createServer(function(req,res) {
- console.log(req.method,req.url,"Content-Type:"+req.headers["content-type"]);
- if(req.method=="GET") {
- if(req.url.match(/\/[^\?].+/)) { //GET /.. (->regexr.com)
- if(!fs.existsSync(fpath+req.url)) {res.writeHead(308,{"Location":"/"}); res.end(); return;}
- var im=fs.readFileSync(fpath+req.url);
- var suf=(fpath+req.url).match(/[^\.\/]+$/)[0],ctype="application/octet-stream";
- switch(suf) {
- case "jpg": ctype="image/jpeg"; break;
- case "png": ctype="image/png"; break;
- case "gif": ctype="image/gif"; break;
- case "mp4": ctype="video/mp4"; break;
- case "webm": ctype="video/webm"; break;
- }
- //console.log("read "+req.url);
- res.writeHead(200,{"Content-Type":ctype,"Access-Control-Allow-Origin":"*"});
- res.end(im,"binary");
- } else if(req.url.match(/\/\?c=.+/)) { //GET /?c=.. (Kommentare zu Bild)
- var df=JSON.parse(fs.readFileSync(fdir))[req.url.slice(4)];
- if(!(df&&df.comments)) {res.writeHead(204,{"Content-Type":"text/plain"}); res.end(""); return;}
- var c=df["comments"];
- //console.log("comments "+JSON.stringify(c));
- var t="";
- for(var a=0; a<c.length; a++) t+=""+c[a]+"\n";
- res.writeHead(200,{"Content-Type":"text/plain","Access-Control-Allow-Origin":"*"});
- res.end(t);
- } else if(req.url.match(/\/\?d=.+/)) { //GET /?d=.. (Bild löschen)
- if(!fs.existsSync(fpath+"/"+req.url.slice(4))) {res.writeHead(304); res.end(); return;}
- fs.unlinkSync(fpath+"/"+req.url.slice(4));
- var dir=JSON.parse(fs.readFileSync(fdir));
- delete dir[req.url.slice(4)];
- fs.writeFileSync(fdir,JSON.stringify(dir));
- //console.log("deleted ",fpath+"/"+req.url.slice(4));
- res.writeHead(200);
- res.end();
- }
- else { //GET /
- var ht=fs.readFileSync("./m_upload.html");
- var dir=JSON.parse(fs.readFileSync(fdir));
- ht+="<div id='images'>";
- for(var a in dir) {
- var af=dir[a]["file"];
- ht+="<a href='"+af+"' target='view'><img src='"+af+"' alt='["+"Video"/*af*/+"]'></img></a>"; }
- ht+="</div>";
- res.writeHead(200,{"Content-Type":"text/html","Access-Control-Allow-Origin":"*"});
- res.write(ht);
- res.end();
- }
- } else if(req.method=="POST") {
- if(req.url!="/upload") { res.writeHead(403); res.end(); }
- var ct=req.headers["content-type"];
- if(!(ct&&ct.match(/(image|video)\/.+/))) {
- res.writeHead(415,{"Accept":"image/*,video/*","Access-Control-Allow-Origin":"*"}); res.end(); }
- var body=Buffer.from("");
- req.on("data",(chunk)=>body=Buffer.concat([body,Buffer.from(chunk)])); //body<-body+chunk
- req.on("end",function() {
- console.log(body.length,body);
- var suf="bin"; //application/octet-stream (default)
- switch(req.headers["content-type"]) {
- case "image/jpeg": suf="jpg"; break;
- case "image/png": suf="png"; break;
- case "image/gif": suf="gif"; break;
- case "video/mp4": suf="mp4"; break;
- case "video/webm": suf="webm"; break;
- }
- fname=Date.now()+"."+suf;
- if(!fs.existsSync(fpath)) fs.mkdirSync(fpath);
- if(!fs.existsSync(fdir)) { fs.writeFileSync(fdir,"{}"); fs.writeFileSync(fpath+"favicon.ico",""); }
- var dir=JSON.parse(fs.readFileSync(fdir));
- dir[fname]={"file":fname,"comments":[]};
- fs.writeFileSync(fdir,JSON.stringify(dir));
- fs.writeFileSync(fpath+"/"+fname,body);
- console.log("wrote /"+fname);
- res.writeHead(201,{"Access-Control-Allow-Origin":"*"});
- res.end();
- });
- } else if(req.method=="DELETE") {
- //redir. to /?d=..
- } else if(req.method=="PUT") {
- var dir=JSON.parse(fs.readFileSync(fdir));
- var df=dir[req.url.slice(1)];
- if(!(df&&df.comments&&req.headers["content-type"]=="text/plain"))
- {res.writeHead(304); res.end(); return;}
- var com="";
- req.on("data",(x)=>com+=x);
- req.on("end",()=>{
- df["comments"].push(com);
- fs.writeFileSync(fdir,JSON.stringify(dir));
- res.writeHead(201,{"Access-Control-Allow-Origin":"*"});
- res.end();
- }); //end of req.on('end' )
- } else if(req.method=="OPTIONS") {
- res.writeHead(200,{"Access-Control-Allow-Methods":"GET,POST,PUT,DELETE,OPTIONS",
- "Access-Control-Allow-Headers":"Content-Type","Access-Control-Allow-Origin":"*"});
- res.end();
- }
- }).listen(44003);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement