mirror of
https://github.com/strapi/strapi.git
synced 2025-07-18 22:45:47 +00:00
42 lines
945 B
JavaScript
42 lines
945 B
JavaScript
![]() |
'use strict';
|
||
|
|
||
|
const _ = require('lodash');
|
||
|
|
||
|
module.exports = ctx => {
|
||
|
const { body = {}, files = {} } = ctx.request;
|
||
|
|
||
|
if (!body.data) {
|
||
|
throw strapi.errors.badRequest(
|
||
|
`When using multipart/form-data you need to provide your data in a JSON 'data' field.`
|
||
|
);
|
||
|
}
|
||
|
|
||
|
let data;
|
||
|
try {
|
||
|
data = JSON.parse(body.data);
|
||
|
} catch (error) {
|
||
|
throw strapi.errors.badRequest(
|
||
|
`Invalid 'data' field. 'data' should be a valid JSON.`
|
||
|
);
|
||
|
}
|
||
|
|
||
|
const filesToUpload = Object.keys(files).reduce((acc, key) => {
|
||
|
const fullPath = _.toPath(key);
|
||
|
|
||
|
if (fullPath.length <= 1 || fullPath[0] !== 'files') {
|
||
|
throw strapi.errors.badRequest(
|
||
|
`When using multipart/form-data you need to provide your files by prefixing them witht the 'files'.`
|
||
|
);
|
||
|
}
|
||
|
|
||
|
const path = _.tail(fullPath);
|
||
|
acc[path.join('.')] = files[key];
|
||
|
return acc;
|
||
|
}, {});
|
||
|
|
||
|
return {
|
||
|
data,
|
||
|
files: filesToUpload,
|
||
|
};
|
||
|
};
|