我正在将 Strapi 与本地上传提供商一起使用。
每当我上传文件时,它都会存储在本地的“public/uploads”文件夹下,该文件夹是公共的。
这意味着任何拥有该文件 ID 的人都可以下载它,例如。http://strapi-admin:1337/uploads/image1_9a9bd50a5b.png
但是,我只想允许:
这样做的最佳方法是什么?
我应该直接修改上传扩展名吗?或者我可以用什么解决方法来实现这个?
我仍然想在本地存储文件(不使用 AWS3 和其他云提供商)
谢谢
解决此问题的最佳方法是创建一个集合,例如 FileShare。Collection表可以是这样的:uuid(UID),文件名(TEXT),fileid(NUMBER),角色(与角色表相关),用户(与用户权限表相关),状态(BOOLEAN)。
使用此逻辑,您将必须创建一个新的文件上传路径,从相应的控制器上传代码,下面的代码将有所帮助:
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);
}
Run Code Online (Sandbox Code Playgroud)
确保使用 uuid 作为前端的下载点,例如https://example.com/file/2343567。不要暴露您的媒体库网址。
然后创建一个控制器,该控制器将从 FileShare 表中查找文件,检查用户的必要权限,然后下载文件。
| 归档时间: |
|
| 查看次数: |
1454 次 |
| 最近记录: |