mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-31 01:47:13 +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, | ||
|  |   }; | ||
|  | }; |