- Liittynyt
- 17.10.2016
- Viestejä
- 486
Hei!
Mulla on Node-taidot tosi kehnoilla kantimilla ja tarvitsisin systeemin, jossa näytetään edistymispalkki kun tiedosto upataan. Käytän pohjana Expressiä ja sen tuomia Routereita. Minulla on filun uppaus toiminnassa Multerilla, jossa saan tulostettua konsoliin edistymisen. Tämä edistyminen pitäisi nyt alkuun saada webbisivulle ihan vaikka numeroina. Osaisitteko auttaa?
Routerissa minulla on seuraavanlainen systeemi. Ideana on, että ennen uppausta ajetaan middleware, joka tallentaa edistymisen ja lähettää tämän funktioon nimeltä SetProgress.
Sitten SetProgress funktio ei tee käytännössä mitään erikoista. Se asettaa globaalin muuttujan siihen lukuun mikä on edistyminen.
Varsinainen uploadPAK tekee seuraavaa. Ideana on, että kun filu on upattu, se uudelleen nimetään ja sen tiedot tallennetaan tietokantaan.
Minulla on Socket-yhteys olemassa. Se rakennetaan ja luodaan kokonaan omassa tiedostossa nimeltä SocketIOConnections.js.
Siellä yhteydet alkaa tällä tavalla:
Ideana on, että tämä socketti on exportissa, jolloin se käynnistetään kun serveri käynnistyy. Tähän sockettiin haluaisin yhdistää. Minulla on sinne yhteys toisesta sovelluksesta, mutta en hoksaa yhtään, että miten saisin tähän yhteyden sitten verkkosivulta, joka pyörii myös tällä samalla palvelimella. Missä kohtaa se pitää tehdä ja miten.
Niin, ja loppuun vielä miten renderöin HTML-sivun. Tämä tapahtuu show_pakdata -funktion avulla.
Jos jotain oleellista alkutietoa puuttuu, kerron kysyttäessä.
Mulla on Node-taidot tosi kehnoilla kantimilla ja tarvitsisin systeemin, jossa näytetään edistymispalkki kun tiedosto upataan. Käytän pohjana Expressiä ja sen tuomia Routereita. Minulla on filun uppaus toiminnassa Multerilla, jossa saan tulostettua konsoliin edistymisen. Tämä edistyminen pitäisi nyt alkuun saada webbisivulle ihan vaikka numeroina. Osaisitteko auttaa?
Routerissa minulla on seuraavanlainen systeemi. Ideana on, että ennen uppausta ajetaan middleware, joka tallentaa edistymisen ja lähettää tämän funktioon nimeltä SetProgress.
Koodi:
var express = require('express');
var router = express.Router();
let pakdata = require('../controllers/PAKData.js');
const access = require('../middleware/hasAuth').hasAccess;
let multer = require('multer')
var upload = multer({ dest: "./public/PAKs" })
/****************** GET *******************/
router.get('/get_pakdata', pakdata.show_pakdata); // HTML-page
router.get('/getPAKs', pakdata.getPAKs); // Get list of PAKS with info
/****************** POST ******************/
// Middleware to show progress before multer.
function progress_middleware(req, res, next){
let progress = 0;
const file_size = req.headers["content-length"];
// set event listener
req.on("data", (chunk) => {
progress += chunk.length;
const percentage = (progress / file_size) * 100;
pakdata.setProgress(percentage)
});
next();
}
router.post('/uploadPAK', progress_middleware, upload.single("file"), pakdata.uploadPAK);
module.exports = router;
Sitten SetProgress funktio ei tee käytännössä mitään erikoista. Se asettaa globaalin muuttujan siihen lukuun mikä on edistyminen.
Koodi:
exports.setProgress = function (progress) {
progressGlobal = progress
console.log(progressGlobal)
}
Varsinainen uploadPAK tekee seuraavaa. Ideana on, että kun filu on upattu, se uudelleen nimetään ja sen tiedot tallennetaan tietokantaan.
Koodi:
exports.uploadPAK = function (req, res, next) {
console.log("Upload Process")
console.log(req.body);
fs.rename("./public/PAKs/" + req.file.filename, "./public/PAKs/" + req.file.originalname);
console.log("renamed");
let newPak = models.PAKData.build({
MapName: req.body.mapName,
Description: req.body.description,
Pakname: req.file.originalname,
PakFileSize: req.file.size,
PathToFile: "PAKs/" + req.file.originalname,
Creator: req.body.creator,
});
// Save the user object to database
return newPak.save().then(result => {
res.redirect('/pakdata/get_pakdata')
})}
{
Minulla on Socket-yhteys olemassa. Se rakennetaan ja luodaan kokonaan omassa tiedostossa nimeltä SocketIOConnections.js.
Siellä yhteydet alkaa tällä tavalla:
Koodi:
exports = module.exports = function(io) {
// Täällä .on('connection') -systeemit
}
Ideana on, että tämä socketti on exportissa, jolloin se käynnistetään kun serveri käynnistyy. Tähän sockettiin haluaisin yhdistää. Minulla on sinne yhteys toisesta sovelluksesta, mutta en hoksaa yhtään, että miten saisin tähän yhteyden sitten verkkosivulta, joka pyörii myös tällä samalla palvelimella. Missä kohtaa se pitää tehdä ja miten.
Niin, ja loppuun vielä miten renderöin HTML-sivun. Tämä tapahtuu show_pakdata -funktion avulla.
Koodi:
exports.show_pakdata = function (req, res) {
console.log("OK")
// res.sendfile('./public/Paks/test.txt');
res.render('pakdata/show_pakdata.hbs');
}
Jos jotain oleellista alkutietoa puuttuu, kerron kysyttäessä.
Viimeksi muokattu: