牙叔教程 簡單易懂javascript
8.8.20-0html
網頁能夠直接上傳文件, 顯然寫腳本不會用網頁上傳文件, 咱們天然要用api來上傳文件java
若是要用api來上傳文件, 那麼必然要有一個憑證, 你有什麼資格上傳文件, 這就涉及到了權限問題, android
憑證通常指的是祕鑰, 你不可能把你的祕鑰給別人用, 對吧?json
萬一別人拿你的祕鑰霍霍你的oss咋辦? 萬一刪庫跑路呢?api
阿里雲oss有一個訪問控制RAM, 咱們能夠建立一個RAM用戶, 該用戶能夠被授予顆粒度很是細的權限, 好比咱們只給他上傳文件的權限, 不給他下載文件的權限, 也不給他刪除文件的權限 markdown
咱們只給ram用戶最小的權限, 同時ram有本身的祕鑰, 必定程度上, 這個祕鑰能夠被公開, 固然, 不公開最好 網絡
若是咱們刪除祕鑰, 而且oss的文件設置爲私有, 那麼別人是下載不了咱們的文件的, 只有擁有祕鑰, 而且有下載權限, 才能下載文件併發
權限規則, 看懂以後, 還算簡單, 同時官方提供了RAM策略編輯器, 這個策略我理解就是指的權限,socket
好比咱們給RAM用戶, 對bucket名字爲autojs-study, 該bucket下的files文件夾, 設置容許上傳文件的權限, 那麼他就只能上傳文件到files文件夾
(enablePath最好打勾)
該策略是: 容許上傳文件到名字爲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": "/"
}
}
}
]
}
複製代碼
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());
複製代碼
部份內容來自網絡 本教程僅用於學習, 禁止用於其餘用途