mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-04 03:43:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
/**
 | 
						|
 * Upload.js controller
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
const _ = require('lodash');
 | 
						|
const { sanitizeEntity } = require('@strapi/utils');
 | 
						|
const apiUploadController = require('./upload/api');
 | 
						|
const adminUploadController = require('./upload/admin');
 | 
						|
 | 
						|
const resolveController = ctx => {
 | 
						|
  const {
 | 
						|
    state: { isAuthenticatedAdmin },
 | 
						|
  } = ctx;
 | 
						|
 | 
						|
  return isAuthenticatedAdmin ? adminUploadController : apiUploadController;
 | 
						|
};
 | 
						|
 | 
						|
const resolveControllerMethod = method => ctx => {
 | 
						|
  const controller = resolveController(ctx);
 | 
						|
  const callbackFn = controller[method];
 | 
						|
 | 
						|
  if (!_.isFunction(callbackFn)) {
 | 
						|
    return ctx.notFound();
 | 
						|
  }
 | 
						|
 | 
						|
  return callbackFn(ctx);
 | 
						|
};
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  find: resolveControllerMethod('find'),
 | 
						|
  findOne: resolveControllerMethod('findOne'),
 | 
						|
  count: resolveControllerMethod('count'),
 | 
						|
  destroy: resolveControllerMethod('destroy'),
 | 
						|
  updateSettings: resolveControllerMethod('updateSettings'),
 | 
						|
  getSettings: resolveControllerMethod('getSettings'),
 | 
						|
 | 
						|
  async upload(ctx) {
 | 
						|
    const {
 | 
						|
      query: { id },
 | 
						|
      request: { files: { files } = {} },
 | 
						|
    } = ctx;
 | 
						|
 | 
						|
    const controller = resolveController(ctx);
 | 
						|
 | 
						|
    if (id && (_.isEmpty(files) || files.size === 0)) {
 | 
						|
      return controller.updateFileInfo(ctx);
 | 
						|
    }
 | 
						|
 | 
						|
    if (_.isEmpty(files) || files.size === 0) {
 | 
						|
      throw strapi.errors.badRequest(null, {
 | 
						|
        errors: [{ id: 'Upload.status.empty', message: 'Files are empty' }],
 | 
						|
      });
 | 
						|
    }
 | 
						|
 | 
						|
    await (id ? controller.replaceFile : controller.uploadFiles)(ctx);
 | 
						|
  },
 | 
						|
 | 
						|
  async search(ctx) {
 | 
						|
    const { id } = ctx.params;
 | 
						|
    const model = strapi.getModel('plugin::upload.file');
 | 
						|
    const entries = await strapi.query('plugin::upload.file').findMany({
 | 
						|
      where: {
 | 
						|
        $or: [{ hash: { $contains: id } }, { name: { $contains: id } }],
 | 
						|
      },
 | 
						|
    });
 | 
						|
 | 
						|
    ctx.body = sanitizeEntity(entries, { model });
 | 
						|
  },
 | 
						|
};
 |