autojs使用阿里雲oss上傳文件

牙叔教程 簡單易懂javascript

autojs版本

8.8.20-0html

訪問阿里雲oss官網

使用步驟

  1. 開通oss
  2. 建立bucket
  3. 上傳文件

上傳文件

網頁能夠直接上傳文件, 顯然寫腳本不會用網頁上傳文件, 咱們天然要用api來上傳文件java

身份識別

若是要用api來上傳文件, 那麼必然要有一個憑證, 你有什麼資格上傳文件, 這就涉及到了權限問題, ​android

憑證通常指的是祕鑰, 你不可能把你的祕鑰給別人用, 對吧?json

萬一別人拿你的祕鑰霍霍你的oss咋辦? 萬一刪庫跑路呢?api

祕鑰

阿里雲oss有一個訪問控制RAM, 咱們能夠建立一個RAM用戶, 該用戶能夠被授予顆粒度很是細的權限, 好比咱們只給他上傳文件的權限, 不給他下載文件的權限, 也不給他刪除文件的權限 ​markdown

咱們只給ram用戶最小的權限, 同時ram有本身的祕鑰, 必定程度上, 這個祕鑰能夠被公開, 固然, 不公開最好 ​網絡

若是咱們刪除祕鑰, 而且oss的文件設置爲私有, 那麼別人是下載不了咱們的文件的, 只有擁有祕鑰, 而且有下載權限, 才能下載文件併發

建立RAM用戶

  1. 前往控制檯

1前往控制檯.jpg

  1. 點擊建立用戶

2建立用戶.jpg

  1. 填寫名稱, 選擇api訪問

3填寫用戶信息.jpg

  1. 記錄ram用戶的祕鑰

4獲取aksk.jpg

  1. 返回用戶頁, 就能看見咱們建立好的ram用戶了

5用戶建立完成.jpg

RAM權限

權限規則, 看懂以後, 還算簡單, 同時官方提供了RAM策略編輯器, 這個策略我理解就是指的權限,socket

好比咱們給RAM用戶, 對bucket名字爲autojs-study, 該bucket下的files文件夾, 設置容許上傳文件的權限, 那麼他就只能上傳文件到files文件夾

(enablePath最好打勾) ram策略編輯器.jpg

受權策略例子

該策略是: 容許上傳文件到名字爲autojs-study的文件夾下的files文件夾

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:PutObject"
      ],
      "Resource": [
        "acs:oss:*:*:autojs-study/files/*"
      ],
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "oss:ListObjects"
      ],
      "Resource": [
        "acs:oss:*:*:autojs-study"
      ],
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
            "",
            "files/*"
          ]
        },
        "StringEquals": {
          "oss:Delimiter": "/"
        }
      }
    }
  ]
}
複製代碼

新建自定義權限策略

  1. 點擊建立權限策略

01建立權限策略.jpg

  1. 填寫策略名字和策略內容, 內容就是上面剛用策略編輯器生成的策略

02填寫策略1.jpg

  1. 查看建立的策略

03查看建立的策略.jpg

給RAM用戶設置策略

  1. 點擊添加權限

001點擊添加權限.jpg

  1. 添加自定義權限

002選擇權限.jpg

  1. 點擊用戶名

003點擊用戶名.jpg

  1. 此處能夠看見添加的策略

004查看設置的權限.jpg

使用api方式上傳文件

let dexPath = files.path("/storage/emulated/0/oss_classes_merge2.dex");
// 這個dex文件是從oss的androidSDK中提取出來的, 
// 只能使用sd卡的路徑, 其餘路徑, 好比apk的內部路徑會報錯
// let dexPath = files.path("./oss_classes_merge2.dex");
runtime.loadDex(dexPath);
importClass(com.alibaba.sdk.android.oss.ClientConfiguration);
importClass(com.alibaba.sdk.android.oss.ClientException);
importClass(com.alibaba.sdk.android.oss.OSS);
importClass(com.alibaba.sdk.android.oss.OSSClient);
importClass(com.alibaba.sdk.android.oss.ServiceException);
importClass(com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider);
importClass(com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider);
importClass(com.alibaba.sdk.android.oss.model.PutObjectRequest);
importClass(com.alibaba.sdk.android.oss.model.PutObjectResult);

let endpoint = "oss-cn-beijing.aliyuncs.com";
let ak = "LTAI5tNodPwPEMbPc1CnSBVb";
let sk = "v8uDRNAeWHfMULTtpTDuNTkWeJR33S";
let bucketName = "autojs-study";
let dirName = "files";
let fileName = "testFile";

let credentialProvider = new OSSStsTokenCredentialProvider(ak, sk, "");
log(credentialProvider);

let conf = new ClientConfiguration();
conf.setConnectionTimeout(15 * 1000); // 鏈接超時,默認15秒。
conf.setSocketTimeout(15 * 1000); // socket超時,默認15秒。
conf.setMaxConcurrentRequest(5); // 最大併發請求書,默認5個。
conf.setMaxErrorRetry(2); // 失敗後最大重試次數,默認2次。
let oss = new OSSClient(context, endpoint, credentialProvider, conf);
let filepath = files.path("/storage/emulated/0/腳本/autojs-ali-oss/key.json");
log(filepath);
log(files.exists(filepath));
let put = new PutObjectRequest(bucketName, dirName + "/" + fileName, filepath);
putResult = oss.putObject(put);

log("PutObject", "UploadSuccess");
log("ETag", putResult.getETag());
log("RequestId", putResult.getRequestId());
複製代碼

修改策略內容

0001修改策略內容.jpg

聲明

部份內容來自網絡 本教程僅用於學習, 禁止用於其餘用途

相關文章
相關標籤/搜索