下周就要離開公司了,把手頭上的事整理的差不多了宇挫,我的小伙伴被隔離要下周來才能交接,趁這個時間寫點(diǎn)技術(shù)酪术,之前處理了很多的oss器瘪、aws上傳今天寫下來,以后可能會用到绘雁,下面先說說oss的簡單上傳方式橡疼,因?yàn)榉制蟼髯詈?00m以上,但這個分片上傳呢庐舟,我們在開發(fā)服欣除、測試服的時候都可以用,而生產(chǎn)環(huán)境因?yàn)檫\(yùn)維那邊配置了嚴(yán)格的權(quán)限挪略,最后在生產(chǎn)環(huán)境用不了历帚,還是用了簡單上傳,不管是簡單上傳還是分片上傳杠娱,百度都有方法挽牢,只是參數(shù)不對就會影響上傳
1、先說client.put簡單上傳的參數(shù)摊求,需要引入oss的sdk
const params = {
????"dir":this.uploadData.dir, //路徑
? ? "district":"CHN",
? ? "serviceType":1,
? ? "tenantId":'0'
}
這是傳給后端簽名的參數(shù)
let reg = new RegExp(".aliyuncs.com")
this.ossGetAccessUrlData = {...res.result, region: res.result.host.replace(reg, "")} //host的數(shù)據(jù)替換
this.client = new OSS({
? ? region: this.ossGetAccessUrlData.region, //桶所在區(qū)域 這個必須要禽拔,我看到很多文檔沒有的
? ? secure: true,? //設(shè)置secure為true,則使用HTTPS室叉;設(shè)置secure為false睹栖,則使用HTTP
? ? policy: this.ossGetAccessUrlData.policy,
? ? accessKeyId: this.ossGetAccessUrlData.accessid, //通過阿里云控制臺創(chuàng)建的AccessKey ID
? ? accessKeySecret: this.ossGetAccessUrlData.secret, //通過阿里云控制臺創(chuàng)建的AccessKey Secret。
? ? bucket: this.ossGetAccessUrlData.bucket, //桶
? ? signature: this.ossGetAccessUrlData.signature //簽名字符串
})
然后就可以this.client.put(this.uploadData.dir, this.file)茧痕,下面是代碼貼圖
但是這種方式有個缺陷就是暴露了?secret磨淌,所以就換了post方式
1、post方式就直接簡化了上傳方式凿渊,就是唯一的缺點(diǎn)是不知道進(jìn)度多少梁只,但為了保密,運(yùn)維同事就通過配置加速了上傳埃脏,還挺快的
跟上面一樣獲取簽名返回的數(shù)據(jù)ossGetAccessUrlData搪锣,下面就是上傳了,不需要引入oss的sdk
let multipart_params =formData({
'key': dir, // 文件存儲路徑
? ? 'policy': ossGetAccessUrlData.policy, // Policy表單域用于驗(yàn)證請求的合法性
? ? 'success_action_status':200, // 文件上傳成功服務(wù)器返回的狀態(tài)
? ? 'OSSAccessKeyId': ossGetAccessUrlData.accessid, //accessid
? ? 'signature': ossGetAccessUrlData.signature,
? ? 'file': file
});
//上傳域名
const domain ='https://' + ossGetAccessUrlData.bucket +'.' + ossGetAccessUrlData.host;
//請求頭配置
const config = {headers: {'Accept':'application/json, text/javascript, */*; q=0.01', 'Content-Type':'multipart/form-data'}}; // 配置請求頭
//正式上傳
let result =new Promise(async (resolve, reject) => {
//oss用post域名即可
? ? await axios.post(domain, multipart_params, config).then((res) => {
if (res.status ===200) {
resolve(domain +'/' + multipart_params?.get('key'))
}else {
reject(res)
}
})
})
return result;
就這樣彩掐,分片上傳呢用下面的代碼构舟,這里就不貼代碼了
在我的AIOT項(xiàng)目upgradeManagement/deviceUpgrade/upgradeUpload.vue中,只為記錄讓自己記得堵幽,哈哈哈