//dotenv require('dotenv').config(); //nextcloud client const { Client, Server } = require("nextcloud-node-client"); const server = new Server({ basicAuth: { password: process.env.nextcloud_PASSWD, username: process.env.nextcloud_ID, }, url: process.env.nextcloud_URL, }); //built-in const path = require("path"); const fs = require('fs') const util = require('util') const { pipeline } = require('stream') const pump = util.promisify(pipeline) //uuid const { v1: uuidv1, v4: uuidv4, } = require('uuid'); //moment const moment = require("moment-timezone"); //fastify const fastify = require("fastify")({ logger: false, }); fastify.register(require("fastify-static"), { root: path.join(__dirname, "public"), prefix: "/" }); fastify.register(require("fastify-formbody")); fastify.register(require("fastify-multipart")); fastify.register(require("point-of-view"), { engine: { handlebars: require("handlebars") } }); //'get' fastify.get("/", function (request, reply) { // reply.view("/src/pages/parade.hbs", {}); reply.view("/src/pages/entry.hbs", {}); }); fastify.get("/entry*", function (request, reply) { reply.view("/src/pages/entry.hbs", {}); }); //'post' fastify.post("/", async function (request, reply) { // -- "accumulate whole file in memory" const data = await request.file() const buffer = await data.toBuffer() // <<< https://github.com/fastify/fastify-multipart/#accumulate-whole-file-in-memory // ^--- this is needed.. dont understand fully, though. related to 'stream' receiving. const client = new Client(server); //create unique folder ==> timestamp + uuid const folder = await client.createFolder("Storage/sound-parade/" + moment().tz('Asia/Seoul').format('YYYYMMDD-HHmmss - ') + uuidv1()); //files console.log(data.fields.audiofile); const file = await folder.createFile(data.fields.audiofile.filename, await data.fields.audiofile.toBuffer()); console.log(data.fields); const text = await folder.createFile("message.txt", Buffer.from(data.fields.message.value)); console.log(data.fields.pixels); const image = await folder.createFile(data.fields.pixels.filename, await data.fields.pixels.toBuffer()); reply.view("/src/pages/entry.hbs", {}); }); //listen fastify.listen(10000, function (err, address) { if (err) { fastify.log.error(err) process.exit(1) } console.log(`Your app is listening on ${address}`) fastify.log.info(`server listening on ${address}`) });