Skip to content

Commit

Permalink
Downloads
Browse files Browse the repository at this point in the history
  • Loading branch information
msimmer committed Dec 4, 2019
1 parent 0db90ca commit 54ee2c2
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 30 deletions.
60 changes: 31 additions & 29 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,45 +1,47 @@
const createError = require('http-errors')
const express = require('express')
const path = require('path')
const cookieParser = require('cookie-parser')
const logger = require('morgan')
const fileUpload = require('express-fileupload')
const createError = require("http-errors");
const express = require("express");
const path = require("path");
const cookieParser = require("cookie-parser");
const logger = require("morgan");
const fileUpload = require("express-fileupload");

const indexRouter = require('./routes/index')
const clientsRouter = require('./routes/clients')
const torrentsRouter = require('./routes/torrents')
const indexRouter = require("./routes/index");
const filesRouter = require("./routes/files");
const clientsRouter = require("./routes/clients");
const torrentsRouter = require("./routes/torrents");

const app = express()
const app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'pug')
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");

app.use(logger('dev'))
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.use(cookieParser())
app.use(fileUpload())
app.use(express.static(path.join(__dirname, 'public')))
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(fileUpload());
app.use(express.static(path.join(__dirname, "public")));

app.use('/', indexRouter)
app.use('/api/v1/clients', clientsRouter)
app.use('/api/v1/torrents', torrentsRouter)
app.use("/", indexRouter);
app.use("/api/v1/files", filesRouter);
app.use("/api/v1/clients", clientsRouter);
app.use("/api/v1/torrents", torrentsRouter);

// catch 404 and forward to error handler
app.use((req, res, next) => {
next(createError(404))
})
next(createError(404));
});

// error handler
app.use((err, req, res /*, next */) => {
// set locals, only providing error in development
res.locals.message = err.message
res.locals.error = req.app.get('env') === 'development' ? err : {}
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};

// render the error page
res.status(err.status || 500)
res.render('error')
})
res.status(err.status || 500);
res.render("error");
});

module.exports = app
module.exports = app;
18 changes: 18 additions & 0 deletions public/javascripts/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -258,5 +258,23 @@
});
});
});

$(document).on("click", "[data-download]", function(e) {
e.preventDefault();
const name = $(this).attr("data-download");

$.get(`/api/v1/files/${name}`).then(resp => {
const url = window.URL.createObjectURL(new Blob([resp]));
const link = document.createElement("a");

link.href = url;
link.setAttribute("download", name);

document.body.appendChild(link);

link.click();
link.parentNode.removeChild(link);
});
});
});
})(jQuery);
25 changes: 25 additions & 0 deletions routes/files.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const path = require("path");
const fs = require("fs");
const express = require("express");
const router = express.Router();

const fileDir =
process.env.NODE_ENV === "production"
? process.env.APP_DIR
: process.env.TMP_DIR;

router.get("/:name", (req, res, next) => {
if (!req.params || !req.params.name) {
return next(new Error("No file name provided"));
}

const filePath = path.join(fileDir, req.params.name);

if (!fs.existsSync(filePath)) {
return next(new Error(`File "${filePath}" does not exist`));
}

res.download(filePath);
});

module.exports = router;
2 changes: 1 addition & 1 deletion views/index.pug
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ block content
value=torrent.id)
.td.col-100= torrent.hash
.td.col-100
a(href="#") Download
a(href="#" data-download=torrent.name) Download
.td.col-50
.table.table__clients
.thead
Expand Down

0 comments on commit 54ee2c2

Please sign in to comment.