阿里云OSS的简单配置
对象存储服务Object Storage Service,简称 OSS),就是一种云端的存储服务。简单来说就是类似百度云的东西,但又比百度云高端,对象存储服务更多的权限在自己,通过简单配置可以完成很多复杂耗时的任务,如果你愿意,你完全可以用它打造一个网盘应用。

总的来说就是你有一个云端存储空间,而空间支配权在于你,你可以将其作为APP的后端数据存储,如图片视频之类的,也可以分配给你的用户,用于上传个人文件......相信你看到本篇文章的时候对OSS一定有一些了解了。如果您已经非常熟悉相关操作,您可以跳过这篇笔记了,当然,如果您能在此情况下阅读完这篇笔记并提出更好的见解那自然是最好不过的。
如果您是初次接触OSS,那么读完本篇文章你或许或有些困惑,毕竟本篇文章只是记录了服务器端和前端的配置,除此之外的一些内容还需要您到阿里云官网查看相关内容,包括bucket的建立、跨域的相关配置等,包括一些专有的名词你也能在官网找到解释。链接:点此跳转

接下来进入正题了。本篇笔记写的是阿里云OSS的相关配置,如果你用的是其他平台的OSS,可能会有些差别。

先说说要实现的功能:按照阿里云的说法,直接在前端利用ACCESSID和ACCESSKEY上传文件是不安全的,的确也是这样,如果别人拿到了你的id和key,那么你的所有东西就都暴露了。所以要使用前端直传的话比较好的方式是从服务器获取签名,这样不会向前端暴露key。
工作流程:
文章正文图片


服务端签名配置
服务端利用阿里云OSS的SDK开发包直接就能生成所需的签名及上传策略,这里直接给出参考代码:
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.MatchMode;
import com.aliyun.oss.model.PolicyConditions;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;

public class StsService {

    public Map getSts() {
        // 只有 RAM用户(子账号)才能调用 AssumeRole 接口
        // 阿里云主账号的AccessKeys不能用于发起AssumeRole请求
        // 请首先在RAM控制台创建一个RAM用户,并为这个用户创建AccessKeys
        String accessId = "XXXXXXXXXX"; //你的accessid
        String host = "XXXXXXXXX";  //存储地址: http://  + 你的bucket + / + 你的endpoint
        String dir="";
        //建立客户端实例
        OSSClient client = new OSSClient(你的endpoint, 你的accessid, 你的accessKey);
        //设置到期时间 3600 秒
        long expireTime = 3600;
        //转化为毫秒 并 加上当前时间点
        long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
        Date expiration = new Date(expireEndTime);
        PolicyConditions policyConds = new PolicyConditions();
        policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
        policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);

        //生成上传策略
        String postPolicy = client.generatePostPolicy(expiration, policyConds);
        byte[] binaryData = new byte[0];
        try {
            binaryData = postPolicy.getBytes("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //base64编码
        String encodedPolicy = BinaryUtil.toBase64String(binaryData);
        //根据上传策略计算签名
        String postSignature = client.calculatePostSignature(postPolicy);

        //将所需的信息放入map准备发给前端(自己根据需求, accessid、policy、signature是必须有的,其余的看需求)
        Map<String, String> respMap = new LinkedHashMap<String, String>();
        respMap.put("accessId", accessId);
        respMap.put("policy", encodedPolicy);
        respMap.put("signature", postSignature);
        //以下非必须,看需求
        respMap.put("host", host);
        respMap.put("expire", String.valueOf(expireEndTime / 1000));

        return respMap;
    }
}

我在上述代码中已经做了相关注释,根据需求更改map中的内容并将accessId、accessKey、endPoint等替换之后就能使用了。只需将respMap传给客户端就行了。


客户端配置
客户端的操作主要是先请求policy,然后提取得到上述服务器返回的内容:policy、accessId、signature等。与服务器交互的方式我就不写,实现方式多种多样。只要最后能得到所需内容即可。

得到这些东西后就能进行文件上传操作了。这里借助formData上传文件,这里看个人喜好,你也可以不用formData:
function uploadFile() {
    //新建formData对象
    var formData = new FormData();
    //获取文件
    var file = $(".file_input")[0].files[0];
    
    //加入文件及相关签名信息
    formData.append("OSSAccessKeyId", accessId);
    formData.append("signature", signature);
    formData.append("policy", policy);
    formData.append("key", “存储文件的位置”);  //存储文件的位置及文件名,比如“test/test.jpg”表示将文件存储到test下并命名为test.jpg
    formData.append("file", file);    //向dataForm添加文件,注意,文件必须放在最后一项添加

    $.ajax({
        url:你的host,         //OSS地址:http:// + 你的bucket名称 + / + 你的OSS对应的endpoint
        processData:false,
        contentType:false,
        type:"POST",
        data:formData,
        success:function () {
            alert("success");
        },
        error:function (data) {
            alert("error");
        }
    })
}
:上述说到的endpoint等都是在阿里云官网可以查到的,不同的区域对应的endpoint不一样,若您发现此文章提到一个新的东西但并未做介绍你可以在文章开头的提供的连接中找到】

至此,配置就算完成了。若您有疑问,可以参看阿里云官网提供的开发文档。当然,也欢迎给我留言,共同探讨学习。


【devsong.org原创内容,转载请注明出处】

 
It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门