微信小程序文件上传、下载和图片处理、文件操作API的使用

news2025/2/25 11:47:57

这次按照我的理解来做这部分的笔记

首先,复习上节课所学的内容。就是网络请求api的使用

 现在我有一个需求就是点击按钮实现获取后端返回的图片

 先打开服务器

 看一下我们要返回的图片路径

 书写结构

 看一下返回来的数据。是在data下的banners里。因此我们封装一下

 这样就做了一个简单的轮播图效果

<button type="primary" bindtap="getAdv">获取轮播图</button>
<swiper class="adv" indicator-dots autoplay circular>
<block wx:for="{{list}}" wx:key="index">
  <swiper-item>
    <image src="{{item.imageUrl}}" mode=""/>
  </swiper-item>
</block>
</swiper>
  data: {
    list:[]
  },
  getAdv(e){
    var page=this
    wx.request({
      url: 'http://localhost:3000/banner',
      method:"GET",
      dataType:"json",
      header:{
        'content-type':"application/json"
      },
      success(res){
        var list=res.data.banners
        page.setData({list:list})
      }
    })
  },

现在如果我们想要将一张网络上的图片保存到本地,那么如何使用呢?

这里我们需要用这个api

 一个简单的页面结构,要实现俩种功能。分别是读取网络图片到本地,和下载图片到我们的后端服务器中

把这张网络图片下载到我们的小程序,然后转换为本地路径,渲染到页面上 

 这里我们调用downloadFile,当访问请求没有问题时,它会返回给我们一个result。而我们打印这个result中明显的发现.tempFilePath就是相对应的本地图片路径。那么我们简单的渲染到页面就可以了 

downLoad(){
      wx.downloadFile({
        url: 'https://img1.baidu.com/it/u=413643897,2296924942&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500',
        success: (result) => {
          console.log('上传成功',result);
          this.setData({
            src:result.tempFilePath
          })
        },
        fail: (res) => {
          console.log('上传失败');
        },
        complete: (res) => {},
      })
    },

下载功能,我们用php搭一个后端服务器。然后把资源放进行。

这里我们采用Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn) phpstudy,这个免费的工具

直接启动服务器就可以了

 把这个php文件放到根目录下面

<?php
if ($_FILES["file"]["error"] > 0) {
  echo "Error: " . $_FILES["file"]["error"];
} else {
  move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]);
  echo "uploads/" . $_FILES["file"]["name"];
}
?>

这部分,有点php基础的应该都能看懂,就不必介绍了。在这里我还需要新建一个uploads这个目录。 

 php代码如下:

upload(){
      wx.chooseMedia({
        count:9,
        success(res){
          console.log(res);
          var path=res.tempFiles[0].tempFilePath
          wx.uploadFile({
            filePath: path,
            name: 'file',
            url: 'http://localhost/upload.php',
            success(res){
              console.log('上传成功'+res.data);
            },
            fail(err){
              console.log('上传失败',err);
            }
          })
        },
        fail(err){
          console.log('选择失败'+err);
        }
      })
    },

 

upload(){
      wx.chooseMedia({
        count:9,
        success(res){
          console.log(res);
          var path=res.tempFiles[0].tempFilePath
          wx.uploadFile({
            filePath: path,
            name: 'file',
            url: 'http://localhost/upload.php',
            success(res){
              console.log('上传成功'+res.data);
            },
            fail(err){
              console.log('上传失败',err);
            }
          })
        },
        fail(err){
          console.log('选择失败'+err);
        }
      })
    },

 解析了这段代码的实现方式: 

  1. wx.chooseMedia() 方法用于选择媒体文件,包括图片、音频和视频等类型。该方法接受两个参数:count 表示最多可选择的文件数量,默认为 9;success 是一个回调函数,当用户选择完媒体文件后会触发该回调函数。在该函数内部,通过 res.tempFiles[0].tempFilePath 获取用户选中的文件路径。
  2. wx.uploadFile() 方法用于上传文件,包括图片、音频和视频等类型。该方法接受五个参数:filePath 表示要上传的文件路径;name 表示上传到服务器上的文件名;url 表示上传到服务器的 URL 地址;success 是一个回调函数,当文件上传成功后会触发该回调函数;fail 是一个回调函数,当文件上传失败时会触发该回调函数。在该函数内部,通过 res.data 获取服务器返回的数据。
  3. 在 fail(err) 回调函数中,会输出上传失败的信息。
  4. 整个 upload() 方法的作用是先调用 wx.chooseMedia() 方法选择媒体文件,然后调用 wx.uploadFile() 方法上传文件。

 这里要注意的一点就这个php的name必须要跟我们成功回调里面name是相同的。用人话来说就是先调用chooseMedia这个api打开文件,因为我们这里设置了count:9因此一次最多能选择9个文件。选择成功执行成功回调,这里在调用uploadFile这个api,我先拿到本地图片路径,然后保存到url(服务器)的路径下面就可以了

说一下最后一部分文件的操作

SavedFileList(){
    wx.downloadFile({
      url: 'https://img1.baidu.com/it/u=413643897,2296924942&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500',
      success: (result) => {
        var path=result.tempFilePath
        wx.saveFile({
          tempFilePath: path,
          success(res){
            var saveFilePath=res.savedFilePath
            console.log('本地文件路径'+saveFilePath);
          }
        })
      },
      fail: (res) => {
        console.log('上传失败');
      },
      complete: (res) => {},
    })
  },

SavedFileList这个函数实现的是,先读取网络图片到本地,然后通过saveFile这个api保存到本地

我们这里的http路径指的是小程序内部的路径

getSavedFileList(){
    wx.getSavedFileList({
      success(res){
        var fileList=res.fileList;
        console.log(fileList);
        for (var i=0;i<fileList.length;i++){
          var file=fileList[i];
          console.log("第"+(i+1)+"个文件");
          console.log("文件创建时间:"+file.createTime);
          console.log("文件大小:"+file.size);
          console.log("文件本地路径:"+file.filePath);

        }
      }
    })
  },

第二个功能是获取本地文件列表,通过getSavedFileList这个api实现。因为成功回调返回的是一个数组,所有我们可以通过遍历数组的方式来,遍历数组中的每一个元素

 通过我们可以调用相对应的属性,例如res.size就是文件的大小

第三个功能是获取本地文件信息,也就是调用 getSavedFileInfo这个api。其实上一个获取列表的方式能获得单一的文件,这个getSavedFileInfo就是基于getSavedFileList的进一步的封装

getSavedFileInfo(){
    wx.getSavedFileList({
      success(res){
        var fileList=res.fileList;
        console.log(fileList);
        wx.getSavedFileInfo({
          filePath: fileList[0].filePath,
          success(res){
            console.log("文件大小"+res.size+"文件创建"+res.createTime);
          }
        })
      }
    })
  }

 第四个功能是实现删除本地文件removeSavedFile这个api实现

其实我觉得在 getSavedFileList也能实现这个删除的功能。就是通过数组的pop删除这个数组的元素。但是,想想这个深层次的是删除这个元素对应的本地地址。应该不是这么简单就实现了。

open(){
    wx.chooseMedia({
      count:9,
      success(res){
        var path=res.tempFiles[0].tempFilePath
        wx.downloadFile({
          // 示例 url,并非真实存在
          url: path,
          success: function (res) {
            const filePath = res.tempFilePath
            wx.openDocument({
              filePath: filePath,
              // fileType:
              success: function (res) {
                console.log('打开文档成功')
              },
              fail(err){
                console.log(err);
              }
            })
          }
        })
      }
    })
  },

 最后的功能也就是实现打开文件的效果,openDocument这个aip给他传入你需要打开的文件的路径,而我们通过chooseMedia和downloadFile的方式将路径保存到本地,然后传进入,就能实现打开文件的效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/521056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【利用AI刷面试题】50道前端基础面试题

文章目录 以下是一些可能出现在前端基础面试中的问题&#xff1a;1. 如何判断当前浏览器是否支持某个 HTML5 特性&#xff1f;2. Box-sizing 属性有哪些取值&#xff0c;分别代表什么意思&#xff1f;3. 什么是浏览器的同源策略&#xff1f;4. 什么是 CORS&#xff1f;如何使用…

rabbitmq+mqtt+docker-compose搭建MQTT服务器和.netcore 客户端实现 订阅+发布

1 搭建MQTT服务器 1.1 Dockerfile 内容 FROM rabbitmq:3.11.6-management COPY install_rabbitmq_plus.sh /usr/local/ RUN chmod 777 /usr/local/install_rabbitmq_plus.sh RUN /bin/sh /usr/local/install_rabbitmq_plus.sh 1.2 容器中需要安装插件的命令 放在 insta…

假如ChatGPT 去面试前端工程师,结果会怎么样?

近日&#xff0c;有个叫 ChatGPT 的同学来我司面试前端&#xff0c;考考他面试八股文。先来问问闭包。 第一问&#xff0c;说说 JS 闭包 追问&#xff0c;详细讲讲闭包 由于篇幅太长&#xff0c;转成文字&#xff0c;以下皆为 ChatGPT 回答 闭包是一个非常重要的 JavaScript 概…

Maven构建Java项目Maven构建项目测试Maven引入外部依赖Maven项目模板

目录 Maven 构建 Java 项目 解释一下这段代码&#xff0c;为什么可以构建一个目录清晰的maven项目“mvn archetype:generate "-DgroupIdcom.companyname.bank" "-DartifactIdconsumerBanking" "-DarchetypeArtifactIdmaven-archetype-quickstart&qu…

volatile的实现简单概述

文章目录 内存屏障volatile关键字的实现synchronized关键字的实现 内存屏障 在讲解是关键字之前&#xff0c;先来了解下内存屏障的概念。 处理器保障禁止内存重排序的指令被称为基本内存屏障。其作用是禁止该屏障前后之间的操作进行重排序&#xff0c;要确保指令前的操作要先…

华为OD机试真题 Java 实现【服务中心选址】【2023Q1 100分 】

一、题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置&#xff0c;并希望能够以此为依据为新的服务中心选址&#xff0c;使服务中心到所有区域的距离的总和最小。 给你一个数组 positions&#xff0c;其中 positions[i] [le…

域名批量查询是否注册-老域名批量查询

域名到期时间批量查询软件 您是否也曾遇到过域名到期或续费时间即将到来&#xff0c;而需要手动一个一个查询每个域名的情况&#xff0c;这不仅费时效率低&#xff0c;还可能会遗漏一些域名。那么&#xff0c;我们为您介绍一款可以帮助您快速、便捷查询多个域名到期时间的软件—…

分享去年学习github命令行操作的笔记

git branch -M main 给远程分支改名 一、本地库操作 1.创建本地目录&#xff0c;用于存储要上传的文本文件。可以手动创建也可以用带命令行 mkdir <文件名> 2.进入文件夹cd <文件名> 3第一次创建时需要初始化仓库git init mac显示隐藏文件SHIFTCOMMAND. mac…

Vue3-黑马(六)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-vueuse &#xff08;2&#xff09;vue3-基础-useRequest &#xff08;3&#xff09;vue3-基础-usePagination &#xff08;1&#xff09;vue3-基础-vueuse 我们在实际中use函数的封装&#xff0c;不用我们自己写&#…

精准室内定位系统源码,采用UWB定位技术开发的智慧工厂定位系统源码

室内定位系统源码&#xff0c;采用UWB定位技术开发的智慧工厂定位系统源码 技术架构&#xff1a;单体服务 硬件&#xff08;UWB定位基站、卡牌&#xff09; 开发语言&#xff1a;java 开发工具&#xff1a;idea 、VS Code 前端框架&#xff1a;vue 后端框架&#xff1a;s…

Linux基础学习---5、磁盘查看和分区类、进程管理类

1、磁盘查看和分区类 1.1 du查看文件和目录占用的磁盘空间 du:disk usage 磁盘占用情况 1、基本语法du 目录/文件 &#xff08;显示目录下每个子目录的磁盘使用情况&#xff09; 2、情况说明选项功能-h以人们较易阅读的GBytes、MBytes、KBytes等格式自行显示-a不仅查看子目录…

iproute2 和 net-tools 介绍

路由&#xff08;Routing&#xff09; 在网络通信中&#xff0c;“路由”是一个网络层的术语。路由是指设备从一个接口上收到数据包&#xff0c;根据数据包的目的地址进行定向并转发到另一个接口的过程。路由表则是若干条路由信息的一个集合体。在路由表中&#xff0c;一条路由…

用Python+OpenCV+Yolov5+PyTorch+PyQt开发的车牌识别软件(包含训练数据)

目录 演示视频 软件使用说明 软件设计思路 演示视频 这是一个可以实时识别车牌的软件&#xff0c;支持图片和视频识别&#xff0c;以下是软件的演示视频。 车牌识别软件 点击查看代码购买地址 软件使用说明 1. 下载源码后&#xff0c;首先安装依赖库。项目所用到的依赖库已…

卷起来了!阿里最新出品“微服务全阶笔记”,涵盖微服务全部操作

近两年&#xff0c;“大厂裁员”总是凭实力冲上各大媒体头条&#xff0c;身在局中的我们早已习以为常。国内的京东&#xff0c;阿里&#xff0c;腾讯&#xff0c;字节&#xff0c;快手&#xff0c;小米等互联网公司都以不同程度的裁员比例向社会输送人才。大量有大厂经验的卷王…

一起打造漂亮的Ubuntu——2023最新版Gnome44

一起打造漂亮的Ubuntu 对于一个工程师&#xff0c;开发者&#xff0c;研究员来说&#xff0c;拥有一台漂亮的机器外加漂亮的系统界面是非常重要的。 作为Ubuntu十年的忠实粉丝&#xff0c;Linux高度依赖用户&#xff0c;无论是工作还是生活&#xff0c;我都一直以来使用着Ubu…

目标检测基础理论

一、基本知识 目标检测中RP什么意思 在目标检测中&#xff0c;RP通常指的是Recall-Precision&#xff0c;即召回率和精确率。召回率是指模型正确识别出的正样本数占所有正样本数的比例&#xff0c;而精确率是指模型正确识别出的正样本数占所有被模型识别为正样本的样本数的比例…

微服务保护——Sentinel

初识Sentinel 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。 解决雪崩问题的常见方式有四种: 超时处理:设定超时时间&#xff0c;请求超过一定时间没有响应就返回错误信息&#xff0c;不会无休止等待舱壁…

谷歌浏览器network error解决方法

很多用户在使用谷歌浏览器时候会出现network error网页提示&#xff0c;很多用户不知道该如何处理这一问题&#xff0c;其实解决方法不止一种&#xff0c;小编整理了两种谷歌浏览器network error解决方法&#xff0c;一起来看看吧~ 谷歌浏览器network error解决方法&#xff1…

【精选】新年祝福(C语言),Easyx图形库应用+源代码分享

【精选】新年祝福&#xff08;C语言&#xff09;&#xff0c;Easyx图形库应用源代码分享 博主&#xff1a;命运之光 专栏&#xff1a;Easyx图形库应用 目录 【精选】新年祝福&#xff08;C语言&#xff09;&#xff0c;Easyx图形库应用源代码分享程序展示一、项目环境简单介绍一…

轨道列车救援VR模拟仿真系统

列车故障是地铁运营中常见的问题&#xff0c;如何迅速准确地救援列车故障是保障地铁运营安全的重要措施。为此&#xff0c;广州华锐互动提供轨道列车救援VR模拟仿真系统定制开发&#xff0c;可以在安全、高效的情况下进行列车故障救援演练&#xff0c;有效提高救援人员的应急能…