Strapi v4.5.6:如何通过API将文件上传至媒体库根目录(Cloudinary)
解决Strapi 4.5.6 + Cloudinary上传文件到根目录的问题
默认情况下,Strapi通过REST/GraphQL API上传的文件确实会自动存入API Uploads文件夹,但可以通过以下两种方式实现根目录上传:
方法1:修改Cloudinary存储配置
直接在Strapi的插件配置中指定Cloudinary的存储文件夹为空,覆盖默认的API Uploads前缀:
- 打开或创建项目根目录下的
config/plugins.js文件 - 在
upload配置中添加folder: ""到providerOptions:
module.exports = ({ env }) => ({ upload: { config: { provider: "cloudinary", providerOptions: { cloud_name: env("CLOUDINARY_NAME"), api_key: env("CLOUDINARY_KEY"), api_secret: env("CLOUDINARY_SECRET"), folder: "", // 清空文件夹配置,文件将直接存到Cloudinary根目录 }, actionOptions: { upload: {}, delete: {}, }, }, }, // 其他插件配置... });
- 重启Strapi服务,之后API上传的文件就会直接存入Cloudinary根目录。
方法2:自定义上传服务覆盖逻辑
如果上述配置不生效,可以通过自定义Strapi的上传服务,手动修改文件存储路径:
- 在
src/api/upload/services/目录下创建或修改upload.js文件 - 覆盖默认的
upload方法,强制清空文件的存储文件夹:
const { createCoreService } = require("@strapi/strapi").factories; module.exports = createCoreService("api::upload.upload", ({ strapi }) => ({ async upload(files, { user, ...rest }) { // 遍历所有上传文件,清空存储文件夹配置 files.forEach(file => { file.providerOptions = { ...file.providerOptions, folder: "" }; }); // 调用父类的上传方法完成操作 return await super.upload(files, { user, ...rest }); }, }));
- 重启Strapi服务,测试API上传即可。
注意事项
- 管理员后台上传的文件默认会存到根目录,上述方法主要针对API上传的场景
- 确认你的Cloudinary插件版本与Strapi 4.5.6兼容,避免配置失效
- 修改配置后,建议上传测试文件到Cloudinary后台验证存储路径是否正确
内容的提问来源于stack exchange,提问作者LeKoels27
相关产品推荐
相关产品推荐

