当前位置:   article > 正文

uniapp上传文件到腾讯云

uniapp上传文件到腾讯云
官方API地址

javaScript_SDK

 下载cos
npm i cos-js-sdk-v5 --save
生成签名

获取secretId和secretKey

  1. let cos = new COS({
  2. SecretId: '*******************************',
  3. SecretKey: '******************************',
  4. })

参考文章:腾讯云如何获取secretId和secretKey_腾讯云 对象存储 只有secretid 没有secretkey-CSDN博客

上传文件
  1. cos.uploadFile({
  2. Bucket: 'link-******',
  3. /* 填写自己的 bucket,必须字段*/
  4. Region: 'ap-nanjing',
  5. /* 存储桶所在地域,必须字段 */
  6. Key: filename,
  7. /* 存储在桶里的对象键(例如:1.jpg,a/b/test.txt,图片.jpg)支持中文,必须字段 */
  8. Body: selectedFile, // 上传文件对象
  9. SliceSize: 1024 * 1024 * 5,
  10. /* 触发分块上传的阈值,超过5MB使用分块上传,小于5MB使用简单上传。可自行设置,非必须 */
  11. onProgress: function(progressData) {
  12. console.log(JSON.stringify(progressData));
  13. }
  14. }, function(err, data) {
  15. if (err) {
  16. console.log('上传失败', err);
  17. } else {
  18. console.log('上传成功');
  19. }
  20. });
配置CORS

appleId很明显就是识别身份用的

SecretId和SecretKey是用来生成签名的(我后面会说)

Bucket和Region是用来识别地区信息的

完整代码

1、创建upload.js文件进行封装

  1. import COS from 'cos-js-sdk-v5';//引入
  2. export function Upload(selectedFile, filename) {
  3. console.log(selectedFile, filename);
  4. //selectedFile:文件, filename:文件名称
  5. let cos = new COS({
  6. SecretId: '********************************',
  7. SecretKey: '********************************',
  8. })
  9. cos.uploadFile({
  10. Bucket: 'link-*********',
  11. /* 填写自己的 bucket,必须字段*/
  12. Region: 'ap-nanjing',
  13. /* 存储桶所在地域,必须字段 */
  14. Key: filename,
  15. /* 存储在桶里的对象键(例如:1.jpg,a/b/test.txt,图片.jpg)支持中文,必须字段 */
  16. Body: selectedFile, // 上传文件对象
  17. SliceSize: 1024 * 1024 * 5,
  18. /* 触发分块上传的阈值,超过5MB使用分块上传,小于5MB使用简单上传。可自行设置,非必须 */
  19. onProgress: function(progressData) {
  20. console.log(JSON.stringify(progressData));
  21. }
  22. }, function(err, data) {
  23. if (err) {
  24. console.log('上传失败', err);
  25. } else {
  26. console.log('上传成功');
  27. }
  28. });
  29. }

2、调用

  1. <template>
  2. <view>
  3. <u-upload @afterRead="afterRead"name="1" multiple :maxCount="1"></u-upload>
  4. </view>
  5. </template>
  6. <script setup>
  7. import {
  8. ref
  9. } from 'vue';
  10. import {
  11. Upload
  12. } from '@/store/upload.js'
  13. function parseFile(src, name) {
  14. // let that = this
  15. return new Promise((resolve, reject) => {
  16. let xhr = new XMLHttpRequest()
  17. xhr.open('GET', src, true)
  18. xhr.responseType = 'blob'
  19. xhr.onload = function(e) {
  20. if (this.status == 200) {
  21. let myBlob = this.response
  22. let files = new window.File(
  23. [myBlob],
  24. name, {
  25. type: myBlob.type
  26. }
  27. ) // myBlob.type 自定义文件名
  28. resolve(files)
  29. } else {
  30. reject(false)
  31. }
  32. }
  33. xhr.send()
  34. })
  35. }
  36. // 新增图片
  37. const afterRead = async (event) => {
  38. console.log(event, "event");
  39. const file = event.file[0];
  40. let blob = await parseFile(file.url, file.name)
  41. Upload(blob, file.name);
  42. }
  43. </script>
  44. <style lang="scss">
  45. </style>

不知道为什么,组件库获得的file文件对象不能直接上传成功,需要转换格式,所以我就进行了格式转换

其他相关文章:

使用腾讯云COS提示CORS策略阻止的解决方案-CSDN博客        

报错Error: params body format error, Only allow File|Blob|String文件上传到腾讯云 ,转换文件格式-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/122113
推荐阅读
相关标签
  

闽ICP备14008679号