feat: allow querystring + single file body uploads for editing tracks
This commit is contained in:
parent
3c1d666dc3
commit
b63afb1146
|
@ -141,6 +141,21 @@ router.get(
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
async function readFile(file) {
|
||||||
|
let fileContent = '';
|
||||||
|
|
||||||
|
file.on('data', function (data) {
|
||||||
|
fileContent += data;
|
||||||
|
});
|
||||||
|
|
||||||
|
await new Promise((resolve, reject) => {
|
||||||
|
file.on('end', resolve);
|
||||||
|
file.on('error', reject);
|
||||||
|
});
|
||||||
|
|
||||||
|
return fileContent;
|
||||||
|
}
|
||||||
|
|
||||||
async function getMultipartOrJsonBody(req, mapJsonBody = (x) => x) {
|
async function getMultipartOrJsonBody(req, mapJsonBody = (x) => x) {
|
||||||
const fileInfo = {};
|
const fileInfo = {};
|
||||||
let body;
|
let body;
|
||||||
|
@ -149,18 +164,7 @@ async function getMultipartOrJsonBody(req, mapJsonBody = (x) => x) {
|
||||||
body = {};
|
body = {};
|
||||||
|
|
||||||
req.busboy.on('file', async function (fieldname, file, filename, encoding, mimetype) {
|
req.busboy.on('file', async function (fieldname, file, filename, encoding, mimetype) {
|
||||||
let fileContent = '';
|
body[fieldname] = await readFile(file);
|
||||||
|
|
||||||
file.on('data', function (data) {
|
|
||||||
fileContent += data;
|
|
||||||
});
|
|
||||||
|
|
||||||
await new Promise((resolve, reject) => {
|
|
||||||
file.on('end', resolve);
|
|
||||||
file.on('error', reject);
|
|
||||||
});
|
|
||||||
|
|
||||||
body[fieldname] = fileContent;
|
|
||||||
fileInfo[fieldname] = { filename, encoding, mimetype };
|
fileInfo[fieldname] = { filename, encoding, mimetype };
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -174,8 +178,15 @@ async function getMultipartOrJsonBody(req, mapJsonBody = (x) => x) {
|
||||||
req.busboy.on('finish', resolve);
|
req.busboy.on('finish', resolve);
|
||||||
req.busboy.on('error', reject);
|
req.busboy.on('error', reject);
|
||||||
});
|
});
|
||||||
} else {
|
} else if (req.headers['content-type'] === 'application/json') {
|
||||||
body = mapJsonBody(req.body);
|
body = mapJsonBody(req.body);
|
||||||
|
} else {
|
||||||
|
body = { body: await readFile(req), ...req.query };
|
||||||
|
fileInfo.body = {
|
||||||
|
mimetype: req.headers['content-type'],
|
||||||
|
filename: req.headers['content-disposition'],
|
||||||
|
encoding: req.headers['content-encoding'],
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return { body, fileInfo };
|
return { body, fileInfo };
|
||||||
|
|
Loading…
Reference in a new issue