<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>又拍云上传文件</title>
<link rel="shortcut icon" href="./favicon.png" type="image/png">
<link rel="stylesheet" href="./css/index.css" />
<script src="./js/vue.js"></script>
<script src="./js/axios.js"></script>
<script src="https://cdn.xiaoli.vip/tools/upyun/hash.js"></script>
</head>
<body>
<div id="app">
<h2>又拍云上传文件(图片版)</h2>
<div class="img-upload">
<img v-if="imgLocalUrl" :src="imgLocalUrl" alt="">
<div v-else>+</div>
<input id="upload" type="file" accept=".jpg,.png" @change="uploadImg" />
</div>
<div class="config">
<div class="config-line">
<div>云存储服务名</div>
<input type="text" v-model="bucket" placeholder="请输入云存储服务名称" />
</div>
<div class="config-line">
<div>操作员</div>
<input type="text" v-model="username" placeholder="请输入操作员名称" />
</div>
<div class="config-line">
<div>密码</div>
<input type="text" v-model="password" placeholder="请输入密码" />
</div>
<div class="config-line">
<div>上传路径</div>
<input type="text" v-model="path" placeholder="请输入上传路径" />
</div>
<div class="config-line">
<div>测试域名</div>
<input type="text" v-model="testCdnUrl" placeholder="请输入测试域名" />
</div>
</div>
<div class="preview-list">
<div v-for="item in uploadImgList" :key="item">
<img :src="item" alt="">
<a :href="item" target="_blank">{{ item }}</a>
</div>
</div>
</div>
</body>
<script>
const App = {
data() {
return {
bucket: 'xiaoli-test',
username: 'test',
password: '0LjHlUNs8n0RWbEPi3c0BB3dOJBkfhwd',
path: '/img',
testCdnUrl: 'http://xiaoli-test.test.upcdn.net',
imgLocalUrl: '',
uploadImgList: []
};
},
methods: {
uploadImg (e) {
const file = e.target.files[0]
this.imgLocalUrl = URL.createObjectURL(file)
/* 创建FormData */
const uploadData = new FormData()
uploadData.append('file', file);
const url = `https://v0.api.upyun.com/${ this.bucket }`
/* 计算policy */
const policyObj = {
bucket: this.bucket,
'save-key': `${ this.path }/{filename}{.suffix}`,
expiration: new Date().getTime() + 600, /* 过期时间,在当前时间+10分钟 */
}
const policy = btoa(JSON.stringify(policyObj))
uploadData.append('policy', policy);
/* 计算 Authorization */
const passwordMd5 = HexMD5.MD5(this.password).toString(HexMD5.enc.Hex)
/* [Method-请求方法, URI-请求路径, policy] */
const arr = ['POST', `/${ this.bucket }`, policy]
const authorization = `UPYUN ${ this.username }:${ b64hamcsha1(passwordMd5, arr.join('&')) }`
uploadData.append('authorization', authorization);
axios({ method: 'POST', url, data: uploadData }).then((res) => {
this.uploadImgList.push(this.testCdnUrl + res.data.url)
}).catch(e => {
console.error('上传失败', e)
alert('上传失败')
})
/* 清除input的值,解决二次上传文件未触发 */
document.getElementById('upload').value = ''
}
}
};
const app = Vue.createApp(App);
app.mount("#app");
</script>
</html>
没有合适的资源?快使用搜索试试~ 我知道了~
前端(js/vue)上传文件到又拍云
共62个文件
sample:13个
xml:8个
master:4个
需积分: 0 1 下载量 200 浏览量
2023-09-08
17:47:39
上传
评论
收藏 295KB ZIP 举报
温馨提示
内容概要:通过js、vue上传文件到又拍云,通过form表单上传文件到又拍云;form表单中的Policy签名、Authorization授权的计算,form表单的出参、入参、请求方法等。 能学到什么: 1. 可以通过api上传文件到又拍云。 2. 了解又拍云 Policy 签名计算方法。 3. 了解又拍云 Authorization 签名计算方法。 4. 了解又拍云form表单上传的出参和入参。 前端上传文件到又拍云;vue上传文件到又拍云;js上传文件到又拍云;又拍云表单上传文件;
资源推荐
资源详情
资源评论
收起资源包目录
web-upload-upyun.zip (62个子文件)
web-upload-upyun
js
upyn-hash-vue.js 9KB
axios.js 31KB
vue.js 478KB
.git
index 2KB
HEAD 23B
refs
heads
master 41B
tags
remotes
origin
HEAD 32B
master 41B
COMMIT_EDITMSG 57B
objects
b9
708cb72fbe08f7a7b2685404ed211ee0b0042c 733B
e6
c750016ff0aac1634fd9263e1a42c50442c7f9 175B
bd
ce6206919ad4a9a2e24558e009572a6ea1c368 2KB
43
722179cd88f640de53f91f0dc676f7a0e2f702 176B
32
52a068eab0bc557a413852c1b9f267e46d5b97 203B
1d
de870cdf419e188dba8fd5bf2f4819201a3afd 117B
a9
a8d6f0257d0d92df21769c4743d807edd3b118 13KB
pack
pack-9a1f6d719729287c3b1b05c9913eed88370e7d0d.idx 2KB
pack-9a1f6d719729287c3b1b05c9913eed88370e7d0d.pack 112KB
87
46cc4bd64e41c1bcf2e32705e638cc8adf86ae 110B
info
c5
76bebc4b66a3cf18309aec1ef9f908bc953ebd 210B
06
2548a723e5a2d5723b969550034c5b4c299c2d 384B
6d
384586bde260f34aa8af79596fc0d2d8ecb7c4 667B
75
6b8ac98cd08b6e4b9a338a8aa02d1bc131d580 1KB
description 73B
packed-refs 114B
FETCH_HEAD 108B
info
exclude 240B
logs
HEAD 531B
refs
heads
master 531B
remotes
origin
HEAD 187B
master 278B
hooks
post-update.sample 189B
prepare-commit-msg.sample 1KB
commit-msg.sample 896B
pre-receive.sample 544B
update.sample 4KB
pre-commit.sample 2KB
pre-rebase.sample 5KB
applypatch-msg.sample 478B
fsmonitor-watchman.sample 5KB
push-to-checkout.sample 3KB
pre-applypatch.sample 424B
pre-push.sample 1KB
pre-merge-commit.sample 416B
config 337B
.idea
git_toolbox_prj.xml 494B
.name 21B
web-upload-upyun.iml 469B
watcherTasks.xml 1KB
vcs.xml 185B
workspace.xml 4KB
inspectionProfiles
Project_Default.xml 256B
又拍云上传文件.iml 469B
modules.xml 301B
.gitignore 109B
jsLibraryMappings.xml 192B
jsLinters
eslint.xml 179B
css
index.less 2KB
index.css 2KB
index.css.map 1KB
index.html 4KB
favicon.png 2KB
共 62 条
- 1
资源评论
采黎
- 粉丝: 1378
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- STM8L101F3P6单片机+CC1100模块433M遥控器设计硬件(原理图+PCB)工程文件.zip
- 上传下载铁人下载系统 Liuxing 1.0-liuxing1.0.rar
- 南京邮电大学数学实验实力雄厚,凭借其优秀的师资力量、丰富的实践教学资源和卓越的科研成果,成为国内一流的数学实验教学和科研基地
- 【火爆朋友圈的今天吃什么源码 v1.0】随机的为用户带来每一天的用餐选择和推荐.rar
- MPU6050中文版数据手册
- 上传下载手机电影下载-mobiledy.rar
- 响应式旅游网站源码下载 马尔代夫旅游网站.rar
- CMS小涴熊漫画连载系统漫画网站源码 带采集API.rar
- 福袋点点.apk
- 基于STM32的电子秤采用0.96寸OLED显示UI界面源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功