vue 3調(diào)用服務(wù)端sts簽名做web端直傳(直接復(fù)制代碼就能用)

<template>

? <div class="app-container home">

? ? <el-row :gutter="20">

? ? ? <el-col :xs="24" :sm="24" :md="12" :lg="8">

? ? ? ? <el-card class="update-log">

? ? ? ? ? <template v-slot:header>

? ? ? ? ? ? <div class="clearfix">

? ? ? ? ? ? ? <span>聯(lián)系信息</span>

? ? ? ? ? ? </div>

? ? ? ? ? </template>

? ? ? ? </el-card>

? ? ? </el-col>

? ? ? <el-col :xs="24" :sm="24" :md="12" :lg="8">

? ? ? ? <el-card class="update-log">

? ? ? ? ? <template v-slot:header>

? ? ? ? ? ? <div class="clearfix">

? ? ? ? ? ? ? <span>更新3日志</span>

? ? ? ? ? ? </div>

? ? ? ? ? ? <div>

? ? ? ? ? ? ? <div class="dashboard-editor-container">

? ? ? ? ? ? ? ? <div class="dashboard-editor-container">

? ? ? ? ? ? ? ? ? <el-upload

? ? ? ? ? ? ? ? ? ? class="upload-demo"

? ? ? ? ? ? ? ? ? ? action=""

? ? ? ? ? ? ? ? ? ? ref="upload"

? ? ? ? ? ? ? ? ? ? :file-list="fileList"

? ? ? ? ? ? ? ? ? ? :limit="1"

? ? ? ? ? ? ? ? ? ? :on-change="handleChange"

? ? ? ? ? ? ? ? ? ? :on-remove="handleRemove"

? ? ? ? ? ? ? ? ? ? :auto-upload="false"

? ? ? ? ? ? ? ? ? ? accept=".zip,.rar"

? ? ? ? ? ? ? ? ? >

? ? ? ? ? ? ? ? ? ? <el-button @slot="trigger" size="small" type="primary"

? ? ? ? ? ? ? ? ? ? ? >選取文件</el-button

? ? ? ? ? ? ? ? ? ? >

? ? ? ? ? ? ? ? ? </el-upload>

? ? ? ? ? ? ? ? ? <el-button

? ? ? ? ? ? ? ? ? ? style="margin-left: 10px"

? ? ? ? ? ? ? ? ? ? size="small"

? ? ? ? ? ? ? ? ? ? type="success"

? ? ? ? ? ? ? ? ? ? @click="submitForm"

? ? ? ? ? ? ? ? ? ? >上傳到服務(wù)器</el-button

? ? ? ? ? ? ? ? ? >

? ? ? ? ? ? ? ? ? <el-button

? ? ? ? ? ? ? ? ? ? style="margin-left: 10px"

? ? ? ? ? ? ? ? ? ? size="small"

? ? ? ? ? ? ? ? ? ? type="success"

? ? ? ? ? ? ? ? ? ? @click="resumeUpload"

? ? ? ? ? ? ? ? ? ? >繼續(xù)</el-button

? ? ? ? ? ? ? ? ? >

? ? ? ? ? ? ? ? ? <el-button

? ? ? ? ? ? ? ? ? ? style="margin-left: 10px"

? ? ? ? ? ? ? ? ? ? size="small"

? ? ? ? ? ? ? ? ? ? type="success"

? ? ? ? ? ? ? ? ? ? @click="stopUplosd"

? ? ? ? ? ? ? ? ? ? >暫停</el-button

? ? ? ? ? ? ? ? ? >

? ? ? ? ? ? ? ? ? <el-button

? ? ? ? ? ? ? ? ? ? style="margin-left: 10px"

? ? ? ? ? ? ? ? ? ? size="small"

? ? ? ? ? ? ? ? ? ? type="success"

? ? ? ? ? ? ? ? ? ? @click="abortMultipartUpload"

? ? ? ? ? ? ? ? ? ? >清除切片</el-button

? ? ? ? ? ? ? ? ? >

? ? ? ? ? ? ? ? ? <el-progress

? ? ? ? ? ? ? ? ? ? :percentage="percentage"

? ? ? ? ? ? ? ? ? ? :status="uploadStatus"

? ? ? ? ? ? ? ? ? ></el-progress>

? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? </div>

? ? ? ? ? ? </div>

? ? ? ? ? </template>

? ? ? ? </el-card>

? ? ? </el-col>

? ? ? <el-col :xs="24" :sm="24" :md="12" :lg="8">

? ? ? ? <el-card class="update-log">

? ? ? ? ? <template v-slot:header>

? ? ? ? ? ? <div class="clearfix">

? ? ? ? ? ? ? <span>捐贈(zèng)支持</span>

? ? ? ? ? ? </div>

? ? ? ? ? </template>

? ? ? ? ? <div class="body"></div>

? ? ? ? </el-card>

? ? ? </el-col>

? ? </el-row>

? </div>

</template>

<script setup name="Index">

import OSS from "ali-oss";

import { getSts } from "@/api/tool/upload";

// let OSS = require("ali-oss"); // 引入ali-oss插件

import { ElMessage } from "element-plus";

const client = ref();


const version = ref("3.3.0");

const fileList = ref([]);

const file = ref(null);

const tempCheckpoint = ref(null); // 用來緩存當(dāng)前切片內(nèi)容

const uploadId = ref("");

const uploadStatus = ref(null); // 進(jìn)度條上傳狀態(tài)

const percentage = ref(0); // 進(jìn)度條百分比

const uploadName = ref("");

function goTarget(url) {

? window.open(url, "__blank");

}

// 點(diǎn)擊上傳至服務(wù)器

async function submitForm(file) {

? const res = await getSts({});

? console.log(res);

? client.value = await new OSS({

? ? region: "oss-cn-*******", //根據(jù)那你的Bucket地點(diǎn)來填寫

? ? accessKeyId: res.data.accessKeyId,

? ? accessKeySecret: res.data.accessKeySecret,

? ? bucket: "********************", //bucket名字

? ? stsToken: res.data.securityToken,

? });

? multipartUpload();

}

// 取消分片上傳事件

async function abortMultipartUpload() {

? window.removeEventListener("online", resumeUpload);

? const name = uploadName.value; // Object所在Bucket的完整路徑奥喻。

? const uploadId = uploadId.value; // 分片上傳uploadId环础。

? const result = await client.abortMultipartUpload(name, uploadId);

? console.log(result, "=======清除切片====");

}

// 暫停分片上傳挑格。

function stopUplosd() {

? window.removeEventListener("online", resumeUpload); // 暫停時(shí)清除時(shí)間監(jiān)聽

? let result = client.value.cancel();

? console.log(result, "---------暫停上傳-----------");

}

// 切片上傳

async function multipartUpload() {

? if (!file.value) {

? ? ElMessage.error("請(qǐng)選擇文件");

? ? return;

? }

? uploadStatus.value = null;

? // console.log("this.uploadStatus",this.file, this.uploadStatus);

? console.log(client.value);

? percentage.value = 0;

? try {

? ? //object-name可以自定義為文件名(例如file.txt)或目錄(例如abc/test/file.txt)的形式涎拉,實(shí)現(xiàn)將文件上傳至當(dāng)前Bucket或Bucket下的指定目錄。

? ? let result = await client.value.multipartUpload(

? ? ? file.value.name,

? ? ? file.value,

? ? ? {

? ? ? ? headers: {

? ? ? ? ? "Content-Disposition": "inline",

? ? ? ? ? "Content-Type": file.value.type, //注意:根據(jù)圖片或者文件的后綴來設(shè)置斩个,我試驗(yàn)用的‘.png’的圖片,具體為什么下文解釋

? ? ? ? },

? ? ? ? progress: (p, checkpoint) => {

? ? ? ? ? tempCheckpoint.value = checkpoint;

? ? ? ? ? uploadId.value = checkpoint.uploadId;

? ? ? ? ? uploadName.value = checkpoint.name;

? ? ? ? ? percentage.value = p * 100;

? ? ? ? ? console.log(

? ? ? ? ? ? p,

? ? ? ? ? ? checkpoint.value,

? ? ? ? ? ? percentage.value,

? ? ? ? ? ? "---------uploadId-----------"

? ? ? ? ? );

? ? ? ? ? // 斷點(diǎn)記錄點(diǎn)。瀏覽器重啟后無法直接繼續(xù)上傳率翅,您需要手動(dòng)觸發(fā)上傳操作。

? ? ? ? },

? ? ? ? parallel: 4,

? ? ? ? meta: { year: 2023, people: "dev" },

? ? ? ? mime: file.value.type,

? ? ? }

? ? );

? ? console.log(result, percentage.value, "result= 切片上傳完畢=");

? } catch (e) {

? ? window.addEventListener("online", resumeUpload); // 該監(jiān)聽放在斷網(wǎng)的異常處理

? ? // 捕獲超時(shí)異常袖迎。

? ? if (e.code === "ConnectionTimeoutError") {

? ? ? // 請(qǐng)求超時(shí)異常處理

? ? ? this.uploadStatus = "exception";

? ? ? console.log("TimeoutError");

? ? ? // do ConnectionTimeoutError operation

? ? }

? ? // console.log(e)

? }

}

// 恢復(fù)上傳冕臭。

async function resumeUpload() {

? window.removeEventListener("online", resumeUpload);

? if (!tempCheckpoint.value) {

? ? ElMessage.error("請(qǐng)先上傳");

? ? return;

? }

? uploadStatus.value = null;

? try {

? ? let result = await client.value.multipartUpload(

? ? ? file.value.name,

? ? ? file.value,

? ? ? {

? ? ? ? headers: {

? ? ? ? ? "Content-Disposition": "inline",

? ? ? ? ? "Content-Type": file.value.type, //注意:根據(jù)圖片或者文件的后綴來設(shè)置,我試驗(yàn)用的‘.png’的圖片燕锥,具體為什么下文解釋

? ? ? ? },

? ? ? ? progress: (p, checkpoint) => {

? ? ? ? ? percentage.value = p * 100;

? ? ? ? ? console.log(

? ? ? ? ? ? p,

? ? ? ? ? ? checkpoint.value,

? ? ? ? ? ? "checkpoint----恢復(fù)上傳的切片信息-------"

? ? ? ? ? );

? ? ? ? ? tempCheckpoint.value = checkpoint;

? ? ? ? },

? ? ? ? checkpoint:tempCheckpoint.value,

? ? ? ? meta: { year: 2020, people: "dev" },

? ? ? ? mime: file.value.type,

? ? ? }

? ? );

? ? console.log(result, "result-=-=-恢復(fù)上傳完畢");

? } catch (e) {

? ? console.log(e, "e-=-=-");

? }

}

// 選擇文件發(fā)生改變

function handleChange(files, fileList) {

? console.log(files, fileList);

? fileList.value = fileList.filter((row) => row.uid == files.uid);

? file.value = files.raw;

? // 文件改變時(shí)上傳

? // this.submitForm(file)

}

function handleRemove(file, fileList) {

? this.percentage = 0; //進(jìn)度條置空

? this.fileList = [];

}

</script>

<style scoped lang="scss">

.home {

? .col-item {

? ? margin-bottom: 20px;

? }

? ul {

? ? padding: 0;

? ? margin: 0;

? }

? font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

? font-size: 13px;

? color: #676a6c;

? overflow-x: hidden;

? ul {

? ? list-style-type: none;

? }

? h4 {

? ? margin-top: 0px;

? }

? h2 {

? ? margin-top: 10px;

? ? font-size: 26px;

? ? font-weight: 100;

? }

? p {

? ? margin-top: 10px;

? ? b {

? ? ? font-weight: 700;

? ? }

? }

? .update-log {

? ? ol {

? ? ? display: block;

? ? ? list-style-type: decimal;

? ? ? margin-block-start: 1em;

? ? ? margin-block-end: 1em;

? ? ? margin-inline-start: 0;

? ? ? margin-inline-end: 0;

? ? ? padding-inline-start: 40px;

? ? }

? }

}

</style>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辜贵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子归形,更是在濱河造成了極大的恐慌托慨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暇榴,死亡現(xiàn)場(chǎng)離奇詭異榴芳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)跺撼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門窟感,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人歉井,你說我怎么就攤上這事柿祈。” “怎么了哩至?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵躏嚎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我菩貌,道長(zhǎng)卢佣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任箭阶,我火速辦了婚禮虚茶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仇参。我一直安慰自己嘹叫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布诈乒。 她就那樣靜靜地躺著罩扇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怕磨。 梳的紋絲不亂的頭發(fā)上喂饥,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天消约,我揣著相機(jī)與錄音,去河邊找鬼员帮。 笑死或粮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的集侯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帜消,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼棠枉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泡挺,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤辈讶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后娄猫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贱除,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年媳溺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了月幌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悬蔽,死狀恐怖扯躺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝎困,我是刑警寧澤录语,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站禾乘,受9級(jí)特大地震影響澎埠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜始藕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一蒲稳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伍派,春花似錦弟塞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至倍踪,卻和暖如春系宫,著一層夾襖步出監(jiān)牢的瞬間索昂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工扩借, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留椒惨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓潮罪,卻偏偏與公主長(zhǎng)得像康谆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嫉到,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容