基于临时授权方式的OSS上传

基于临时授权方式的OSS上传

OSS支持临时授权URL,可以实现临时性的上传和下载,此处介绍一下如何在项目中使用。
对应场景:客户端需要上传文件,但不想或不方便将accessKeyId和accessKeySecret下发到客户端,或者无法继承OSS-SDK的情况。
具体上传仍旧是客户端与OSS服务器之间直接进行.
应用的理论核心是OSS提供的”在URL中包含签名”,参考这里

实现思路:

Created with Raphaël 2.1.2 客户端 客户端 业务服务器 业务服务器 OSS服务器 OSS服务器 [A]获取用于上传的临时URL [B]调用OSS-SDK生成临时URL [C]返回临时URL [D]使用临时URL上传文件 [E]返回上传结果

代码实现

  • [A] 客户端向业务服务器发送获取上传地址的请求,一般是POST请求,向服务器发送要上传的文件信息(如文件名)
  • [B] 业务服务器收到对应请求后对用户身份做验证,通过后调用OSS-SDK或者手动生成对应的临时URL.
    NodeJS下可以用以下代码生成: (业务服务器端)
var client = new OSS({
    endpoint: configInfo.OSS_ENDPOINT,
    accessKeyId: configInfo.OSS_KEY,
    accessKeySecret: configInfo.OSS_SECERT,
    bucket: configInfo.OSS_BUCKET
});
function getTempSignedUrl(ossObjectPath,type){
  var url = client.signatureUrl(ossObjectPath, {
    expires: 60, //过期时间,这里设置为短期的60s
    method: 'PUT', //由于是上传,此处填写PUT; 如果是下载的话,为GET
    'content-type': type||'application/octet-stream' //conent类型,默认为octet-stream
  });
  console.log(url);
  return url;
}
  • [C] 业务服务器将生成好的url返回客户端,也就是刚刚的POST请求的响应.
  • [D] 客户端根据临时URL进行上传
    web浏览器里面可以使用下面代码实现上传:(浏览器端)
function putfileToOSS(url, domId, contentType) {
        var f = document.getElementById(domId); //input file控件
        var uploadReq = new Request(url, { //url为服务器接口URL
            method: "PUT",
            headers: new Headers({ 'Content-Type': contentType||'application/octet-stream' }),
            body: f.files[0]  //仅支持单个文件,取第一个
        });
        return fetch(uploadReq).then(x => x.text()).then(x => {
            console.log(x); //此处假定响应信息是text
            return x;
        });
    }
  • [E] OSS服务器返回上传结果,200为成功,其他为失败,常见的有403(过期或权限有误)等,具体信息参考OSS相关文档.

风险

临时URL有被泄露的可能性,请注意在业务层面做好安全保障,避免无意或有意泄露.
同样,临时URL的有效期不宜太长,时间过长该风险会变大.
可以通过制定content-type的方式进一步减少该风险.

待改进

要求更严格的情况下,可以在上述功能的基础上增加文件MD5的传递,也就是根据待上传文件的MD5生成临时URL,这样会对客户端有一定的要求,但安全性更高.(此种方案OSS支持)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Node.js中使用OSS(阿里云对象存储)进行文件上传,你可以按照以下步骤进行操作: 1. 首先,在你的项目目录下,通过npm安装ali-oss库。可以使用以下命令:npm install ali-oss --save。 2. 创建一个OSS配置文件(比如server/oss.js),在该文件中配置OSS的相关信息,包括Region(Bucket所在地域)、accessKeyId(你的阿里云账号的Access Key ID)、accessKeySecret(你的阿里云账号的Access Key Secret)以及bucket(你的Bucket名称)。 3. 在你的上传组件中(比如components/uploadimage.vue),引入刚才创建的OSS配置文件并创建一个OSS客户端。 4. 在上传组件中,通过调用OSS客户端的upload方法来实现文件上传。你可以通过创建一个上传按钮,并在点击按钮时触发上传操作。上传时需要提供需要上传的文件的路径以及目标路径。 5. 在上传成功或失败的回调函数中,你可以根据返回的结果来处理相应的逻辑,比如显示上传成功或失败的消息提示。 总结一下,使用Node.js进行OSS文件上传的步骤如下: 1. 安装ali-oss库。 2. 创建OSS配置文件,并配置相关信息。 3. 在上传组件中引入OSS配置文件并创建OSS客户端。 4. 创建上传按钮,并在点击按钮时触发上传操作。 5. 在上传成功或失败的回调函数中处理相应逻辑。 希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [vue+node.js操作阿里云OSS上传和删除文件](https://blog.csdn.net/weixin_42966151/article/details/129029386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值