You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Strapi Upload API将文件上传至指定媒体库文件夹?

解决Strapi Upload API指定上传文件夹的问题

Strapi官方文档未直接提及该功能,但可以通过以下几种方式实现自定义上传文件夹:

方法1:通过生命周期钩子动态指定路径

在src/api/upload/content-types/upload/lifecycles.js(无则新建)中添加钩子逻辑,在文件上传前修改存储路径:

module.exports = {
  async beforeCreate(event) {
    const { data } = event.params;
    // 从上传参数中获取目标文件夹,可在form-data里传递folder字段
    const targetFolder = data.folder || 'custom-folder';
    
    data.files.forEach(file => {
      // 修改文件存储路径,包含自定义文件夹
      file.path = `${targetFolder}/${file.hash}${file.ext}`;
      file.providerOptions = {
        ...file.providerOptions,
        path: targetFolder
      };
    });
  }
};

上传时在form-data中额外传入folder字段(如folder=user-avatar),即可将文件存入指定文件夹。

方法2:扩展上传服务自定义逻辑

在src/api/upload/services/upload.js中重写上传服务,添加文件夹指定逻辑:

const { createCoreService } = require('@strapi/strapi').factories;

module.exports = createCoreService('api::upload.upload', ({ strapi }) => ({
  async upload(files, config = {}) {
    // 从配置参数中读取目标文件夹
    const targetFolder = config.folder || 'default-dir';
    
    // 为每个文件添加文件夹前缀
    files.forEach(file => {
      file.path = `${targetFolder}/${file.hash}${file.ext}`;
    });
    
    // 调用原生上传方法完成操作
    return await super.upload(files, config);
  }
}));

调用Upload API时,在请求参数中携带folder字段即可指定存储文件夹。

注意事项

  • 若使用本地存储,需确保目标文件夹存在,可借助Node.js的fs.mkdirSync添加自动创建逻辑(添加recursive: true参数)
  • 若使用云存储(如AWS S3),需对应修改云存储的路径参数(例如S3的Key字段需包含文件夹路径)

内容的提问来源于stack exchange,提问作者Moorthy G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:25:18