当前位置:   article > 正文

用小程序中的uni方法实现uView中的upload组件并将图片上传到腾讯云_u-upload cos

u-upload cos

一、uni中选择图片的方法与uview中的upload组件选择的不同

  1. 功能差异

    • uni.chooseImage是uni-app框架提供的原生API,用于选择本地相册或拍照获取图片。
    • uview中的upload组件是一个UI组件,用于上传图片或文件到服务器。
  2. 调用方式

    • uni.chooseImage需要在代码中主动调用API来触发选择图片的操作。
    • uviewupload组件是一个UI组件,需要在页面中引入并配置参数,然后通过用户交互来触发选择图片的操作。
  3. 上传功能

    • uni.chooseImage只能选择图片,需要额外编写代码来实现图片上传功能。
    • uview中的upload组件集成了上传功能,可以直接上传选择的图片或文件到服务器。

二、upload的简单使用(详细看uView的官网Upload 上传 | uView - 多平台快速开发的UI框架 - uni-app UI框架 (gitee.io)

  1. <template>
  2. <u-upload :action="action" :file-list="fileList" ></u-upload>
  3. </template>
  4. <script>
  5. export default {
  6. data() {
  7. // 演示地址,请勿直接使用
  8. action: 'http://www.example.com/upload',
  9. fileList: [
  10. {
  11. url: 'http://pics.sc.chinaz.com/files/pic/pic9/201912/hpic1886.jpg',
  12. }
  13. ]
  14. }
  15. }
  16. </script>

也可以设置手动上传

  1. <template>
  2. <view>
  3. <u-upload ref="uUpload" :action="action" :auto-upload="false" ></u-upload>
  4. <u-button @click="submit">提交</u-button>
  5. </view>
  6. </template>
  7. <script>
  8. export default {
  9. data() {
  10. // 非真实地址
  11. action: 'http://www.example.com/upload',
  12. },
  13. methods: {
  14. submit() {
  15. this.$refs.uUpload.upload();
  16. },
  17. }
  18. }
  19. </script>

三、用uniapp的方法实现选择图片并上传腾讯云

1.下载cos

npm i cos-js-sdk-v5 --save

2.生成签名

获取secretId和secretKey

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

3.上传文件

  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. });

4.配置cos

四、完整代码

1.新建upload.js文件

  1. import COS from 'cos-js-sdk-v5';
  2. //上传图片
  3. export function Upload(selectedFile, filename) {
  4. console.log(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('上传成功', data);
  27. }
  28. });
  29. }
  30. //删除图片
  31. export function Delete(filename) {
  32. console.log(filename);
  33. // 找到最后一个斜杠的索引
  34. const lastIndex = filename.lastIndexOf('/');
  35. // 提取最后一个斜杠后面的字段
  36. const lastSegment = filename.substring(lastIndex + 1);
  37. console.log(lastSegment); // 输出: 289f83ec-cf17-47f1-bd99-b059e0ef33d1
  38. let cos = new COS({
  39. SecretId: 'AKIDz6FIRWTHsGg7TfvDXvFdu6OXg2Z9pbWS',
  40. SecretKey: '9KbnwwnV2dGoMsgQ1eFh2H4reVEnAMSK',
  41. })
  42. cos.deleteObject({
  43. Bucket: 'link-1320976986',
  44. /* 填写自己的 bucket,必须字段*/
  45. Region: 'ap-nanjing',
  46. /* 存储桶所在地域,必须字段 */
  47. Key: lastSegment,
  48. /* 存储在桶里的对象键(例如:1.jpg,a/b/test.txt,图片.jpg)支持中文,必须字段 */
  49. }, function(err, data) {
  50. if (err) {
  51. console.log('上传失败', err);
  52. } else {
  53. console.log('上传成功', data);
  54. }
  55. });
  56. }
  57. // 转换文件格式
  58. export const parseFile = (src, name) => {
  59. // console.log("转换格式");
  60. // let that = this
  61. return new Promise((resolve, reject) => {
  62. let xhr = null
  63. if (window.XMLHttpRequest) {
  64. xhr = new XMLHttpRequest();
  65. } else {
  66. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  67. }
  68. xhr.open('GET', src, true)
  69. xhr.responseType = 'blob';
  70. xhr.onload = function(e) {
  71. if (this.status == 200) {
  72. let myBlob = this.response
  73. let files = new window.File(
  74. [myBlob],
  75. name, {
  76. type: myBlob.type
  77. }
  78. ) // myBlob.type 自定义文件名
  79. resolve(files)
  80. console.log("resolve(files)");
  81. } else {
  82. reject(false)
  83. console.log("reject(false)");
  84. }
  85. }
  86. xhr.send()
  87. })
  88. }

2.使用

注意:用uni.chooseimage方法选择的图片路径需要经过处理才能上传云

  1. <view class="jiantou2">
  2. <u-icon name="more-dot-fill" color="white" @click="morefuck"></u-icon>
  3. </view>
  4. import {
  5. Upload,
  6. Delete,
  7. parseFile
  8. } from '@/store/upload.js';
  9. const morefuck = async () => {
  10. console.log("想要获取图片");
  11. uni.chooseImage({
  12. count: 1, //上传图片的数量,默认是9
  13. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  14. sourceType: ['album'], //从相册选择
  15. success: async (res) => {
  16. console.log(res);
  17. const tempFilePath = res.tempFilePaths[0]; //拿到选择的图片,是一个数组
  18. const file = {
  19. url: tempFilePath, // 临时文件路径
  20. name: tempFilePath.substring(tempFilePath.lastIndexOf('/') +
  21. 1) // 提取文件名
  22. };
  23. console.log(file.name, "key的值");
  24. uni.uploadFile({
  25. url: '****************************',
  26. filePath: tempFilePath,
  27. name: 'file',
  28. formData: {
  29. 'key': file.name,
  30. 'success_action_status': '200',
  31. // 'Signature': '<Signature>',
  32. 'Content-Type': 'image/jpeg',
  33. 'Region': 'ap-nanjing',
  34. 'Bucket': 'link-******************',
  35. 'SecretId': '**********************',
  36. // 'Timestamp': '<Timestamp>',
  37. // 'Nonce': '<Nonce>',
  38. },
  39. success: function(uploadRes) {
  40. console.log('upload success', uploadRes)
  41. },
  42. fail: function(uploadRes) {
  43. console.log('upload fail', uploadRes)
  44. },
  45. complete: function(uploadRes) {
  46. console.log('upload complete', uploadRes)
  47. }
  48. })
  49. const finalurl =
  50. "url" + file.name;
  51. totalmition.value.avatar = finalurl;
  52. putUser(totalmition.value).then(data => {
  53. oldtouxiang.value = totalmition.value.avatar;
  54. })
  55. // 转换格式
  56. // let blob = await parseFile(file.url, file.name);
  57. // 上传到腾讯云
  58. // Upload(blob, file.name);
  59. //删除老头像
  60. // console.log(oldoldtouxiang.value, "删除老头像");
  61. // Delete(oldoldtouxiang.value);
  62. }
  63. });
  64. };

这样就能用uni.chooseimage的方法选择图片并且将图片做处理然后上传到腾讯云上

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

闽ICP备14008679号