Загрузка Strapi в локальный частный путь

#strapi

#strapi

Вопрос:

Я использую Strapi с локальным поставщиком загрузки.

Всякий раз, когда я загружаю файл, он хранится в локальной папке «public / uploads», которая является общедоступной.

Это означает, что любой, у кого есть идентификатор файла, может загрузить его, например. http://strapi-admin:1337/uploads/image1_9a9bd50a5b.png

Тем не менее, я хотел бы разрешить только:

  • загружается аутентифицированным пользователям, у которых есть роль «потребитель», чтобы иметь возможность загружать файлы через API strapi.

Каков наилучший способ для этого?

Должен ли я изменять расширение загрузки напрямую? или это какой-либо обходной путь, который я могу использовать для реализации этого?

Я все равно хотел бы хранить файлы локально (не используя AWS3 и других облачных провайдеров)

Спасибо

Ответ №1:

Лучший способ решить эту проблему — создать коллекцию, например, файловый ресурс. Таблица сбора может быть такой: uuid (UID), имя файла (ТЕКСТ), идентификатор файла (НОМЕР), роль (связанная с таблицей ролей), пользователь (связанный с таблицей разрешений пользователя), статус (ЛОГИЧЕСКОЕ значение).

Используя эту логику, вам нужно будет создать новый маршрут для загрузки файлов, выгрузки кода с соответствующего контроллера, приведенный ниже код поможет:

     const validateUploadBody = require('strapi-plugin-upload/controllers/validation/upload');
                async create(ctx){
             let userData=ctx.state?.user; let requestData=ctx.request.body;
         const {
                    request: { body, files: { files } = {} },
                  } = ctx;
          let uploadedFiles = await strapi.plugins.upload.services.upload.upload({
                data: await validateUploadBody(body),
                files,
              });
     let datat={
                filename:uploadedFiles[0].name,
                fileid:uploadedFiles[0].id,
                status:true,
                uuid:"3456345678", // Generate random perhaps use moment().format("x")
                role:2 //it can be any role of your choice
                                    }
  let updateLibrary= await strapi.query('file-shares').create(datat); 
        
        }
 

Убедитесь, что вы используете uuid в качестве точки загрузки из вашего интерфейса, например https://example.com/file/2343567 . Не предоставляйте URL-адрес своей медиа-библиотеки.

Затем создайте контроллер, который будет искать файл из таблицы FileShare, проверьте необходимые разрешения для пользователя, а затем загрузите файл.