• uniapp v3+ts 使用 u-upload上传图片以及视频


    上传图片方法 

    1. <u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="file" multiple :maxCount="6"></u-upload>
    2. // maxCount 最大上传数
    3. const fileList1 = ref([]);
    4. const file = ref([])
    5. // 删除图片
    6. const deletePic = (event : any) => {
    7. fileList1.value.splice(event.index, 1);
    8. file.value.splice(event.index, 1);
    9. // console.log(fileList1.value); file
    10. };
    11. // 新增图片
    12. const afterRead = async (event : any) => {
    13. // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
    14. let lists = [].concat(event.file);
    15. let fileListLen = fileList1.value.length;
    16. lists.map((item) => {
    17. fileList1.value.push({
    18. ...item,
    19. status: 'uploading',
    20. message: '上传中',
    21. });
    22. });
    23. for (let i = 0; i < lists.length; i++) {
    24. const result = await uploadFilePromise(lists[i].url);
    25. let item = fileList1.value[fileListLen];
    26. fileList1.value.splice(fileListLen, 1, {
    27. ...item,
    28. status: 'success',
    29. message: '',
    30. url: result,
    31. });
    32. fileListLen++;
    33. }
    34. };
    35. const uploadFilePromise = (url : any) => {
    36. return new Promise((resolve, reject) => {
    37. let a = uni.uploadFile({
    38. url: import.meta.env.VITE_APP_BASE_URL + 'file/image', // 图片上传地址
    39. filePath: url,
    40. name: 'file',
    41. header: {
    42. "site-id": import.meta.env.VITE_SITE_ID,
    43. "token": getToken()
    44. },
    45. formData: {
    46. },
    47. success: (res) => {
    48. let respic = JSON.parse(res.data)
    49. console.log(respic.data.url, '图片');
    50. let obj = respic.data.url
    51. file.value.push(obj)
    52. setTimeout(() => {
    53. resolve(res.data.data);
    54. }, 1000);
    55. },
    56. });
    57. });
    58. };

    上传视频 方法

    1. <u-upload accept="video" :fileList="videoFileList" @afterRead="videoAfterRead"
    2. @delete="deleteVideo " name="3" multiple :maxCount="1"></u-upload>
    3. const videoFileList = ref([])
    4. const videoAfterRead = async (event : any) => {
    5. let lists = [].concat(event.file);
    6. let fileListLen = videoFileList.value.length;
    7. lists.map((item) => {
    8. videoFileList.value.push({
    9. ...item,
    10. status: 'uploading',
    11. message: '上传中',
    12. });
    13. });
    14. for (let i = 0; i < lists.length; i++) {
    15. const result = await uploadVideoFile(lists[i].url);
    16. let item = videoFileList.value[fileListLen];
    17. videoFileList.value.splice(fileListLen, 1, {
    18. ...item,
    19. status: 'success',
    20. message: '',
    21. url: result,
    22. });
    23. fileListLen++;
    24. }
    25. };
    26. const videoValue = ref('')
    27. const uploadVideoFile = (url : any) => {
    28. return new Promise((resolve, reject) => {
    29. let a = uni.uploadFile({
    30. // 后端上传视频地址
    31. url: import.meta.env.VITE_APP_BASE_URL + 'file/video', // 视频上传地址
    32. filePath: url,
    33. name: 'file',
    34. // header 携带内容 根据自己后端要求
    35. header: {
    36. "site-id": import.meta.env.VITE_SITE_ID,
    37. "token": getToken()
    38. },
    39. success: (res) => {
    40. res.data = JSON.parse(res.data)
    41. // console.log(res.data, '测试');
    42. videoValue.value = res.data.data.url
    43. // console.log(videoValue.value, '测试');
    44. // 这个状态值要根据后端接口返的 若对不上 则视频不会回显,一直显示上传中
    45. if (res.data.code == 1) {
    46. setTimeout(() => {
    47. resolve(res.data.url)
    48. }, 1000)
    49. }
    50. },
    51. fail: (error) => {
    52. console.log(error, '上次失败的原因');
    53. uni.showToast({
    54. title: '上传失败',
    55. icon: 'none'
    56. });
    57. reject(error)
    58. }
    59. });
    60. });
    61. };
    62. const deleteVideo = (event : any) => {
    63. videoFileList.value.splice(event.index, 1);
    64. videoValue.value = '';
    65. }

    点击提交时 要传递视频 跟图片的地址值

    1. const submit = () => {
    2. let params = {
    3. images: file.value,
    4. video: videoValue.value
    5. }
    6. console.log(params, '发布的参数');
    7. // 执行自己的请求 todo
    8. }

    回显图片

    1. const infoSpeakUpFn = (id:number) => {
    2. infoSpeakUp(id).then((res:any) => {
    3. // console.log(res, '获取详情');
    4. res.data.images.forEach(function(item:any, index:number) {
    5. let img_url = img(item)
    6. fileList1.value.splice(index, 1, {
    7. ...[],
    8. status: 'success',
    9. message: '',
    10. url: img_url,
    11. });
    12. });
    13. })
    14. }

  • 相关阅读:
    (AAAI2020 Yao) Graph Few-shot Learning via knowledge transfer
    基于ubuntu tun虚拟网卡设备完成ping的发送与模拟接收
    能ping通但无法上网的问题
    ubuntu启动转圈,无法进入登录界面
    Matlab:矩阵和幻方矩阵
    深圳市关于加快培育数字创意产业集群的若干措施 (征求意见稿)
    js添加 删除 替换 插入节点所用的方法。js常用的几种事件。
    EquiVSet
    初识搜索:百度搜索产品经理的第一课
    Fluorescein-PEG-CLS,胆固醇-聚乙二醇-荧光素用于缩短包封周期
  • 原文地址:https://blog.csdn.net/LJM51200/article/details/133994791