前端oss 直传如何保证Key 唯一?

发布于 2022-09-12 02:16:55 字数 1143 浏览 53 评论 0

我使用的框架是uni-app。开发app。

上传文件代码

/**
* 此处key 截取方法是参照oss最佳实践里的
* 如果res.filePath为"file:///storage/emulated/0/DCIM/Camera/41aa3f433bb3b368fcc0eda32a7364f6.mp4"
此处的key就为 '/41aa3f433bb3b368fcc0eda32a7364f6.mp4'
*/
let key = res.filePath.substr(p1.filePath.lastIndexOf('/') + 1);
cos.postObject({
    Bucket: 'examplebucket-1250000000',
    Region: 'ap-beijing',
    Key: key,
    FilePath: tmpFilePath, // wx.chooseImage 选择文件得到的 tmpFilePath
    onProgress: function (info) {
        console.log(JSON.stringify(info));
    }
}, function (err, data) {
    console.log(err || data);
});

查阅腾讯oss 文档得知key规范:* 对象键(ObjectKey):对象键是对象在存储桶中的唯一标识。
腾讯oss 文档

但是作为前端,我很难保证这个key 唯一

于是我在网上搜索前端生成唯一id的方法

function guid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
        return v.toString(16);
    });
}

我想问下你们是怎么做的?这个方法可用吗?
如何生成一个唯一id?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

孤君无依 2022-09-19 02:16:56

使用md5+时间戳或者使用uuid

月棠 2022-09-19 02:16:56

正常应该是请求后端,获取一代段token签名,里面有需要的key

紫瑟鸿黎 2022-09-19 02:16:56

用 uuid 足矣

远昼 2022-09-19 02:16:55

一楼说用uuid,其实也是不对的。
因为用的最为广泛的uuid v4 版本是随机生成的,他无法保证唯一。随机的意思就是第一次随机结果为1,第二次随机结果也有可能是1,他只是几率小,但不能保证绝对唯一。
你们可能会说uuid 会拿mac 地址什么的。但是你仔细读那个uuid 文档就会发现,并没有说会拿地址,而且我开发的是app,你确定能拿到mac地址?。
不管你们查询uuid有多安全,我承认,但请注意,这是js 生成的,并且v4 版本明确表示是随机的。

我的最终解决方案是 ${uuid}-md5(${(token/userid)-${Date.now()}})

uuid + md5(token + 时间戳)

绝对的唯一。同一时间,token 绝对唯一。token 相同时,时间戳必然不同,从而保证了md5 后的字符串绝对唯一。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文