当前位置: 首页 > news >正文

微信小程序 图片的上传

错误示范

/*从相册中选择文件  微信小程序*/chooseImage(){wx.chooseMedia({count: 9,mediaType: ['image'],sourceType: ['album'],success(res) {wx.request({url:"发送的端口占位符",data:res.tempFiles[0].tempFilePath,method:'POST',success(res){//请求成功后应该返回的是分割完成的图片(Arraybuffer 类型)res.data},fail(err){console.error('图片发送请求错误:'err.errMsg+',错误码:'+err.error,)}})}})},

两个致命错误(是菜鸟勿笑):

  • 首先wx.request的data是用来发送文本数据的,最多可以发送Arraybuffer的音频数据,这里应该使用 wx.uploadFile来上传图片到后端。
  • 其次res.tempFiles[0].tempFilePath表示的也只是图片的临时路径,发送图片应该将图片文件转换成 FormData 对象。
/*从相册中选择文件  微信小程序*/chooseImage(){wx.chooseMedia({count: 1, // 选择图片的数量,只需要选择一张图片mediaType: ['image'],sourceType: ['album'],success(res) {// 只关心第一张图片const tempFilePath = res.tempFiles[0].tempFilePath;const formData = new FormData();formData.append('file', {name: 'image.jpg', // 指定文件名uri: tempFilePath,type: 'image/jpeg', // 文件类型});wx.uploadFile({url: "发送的端口占位符", filePath: tempFilePath,name: 'file', // 与后端约定的文件对应的 key, formData: formData, // 如果有额外的表单数据,可以在这里添加success(uploadRes) {console.log('图片上传成功', uploadRes);// 这里可以处理上传成功后的逻辑,比如解析服务器返回的数据},fail(err) {console.error('图片上传请求错误:', err.errMsg);}});},fail(err) {console.error('选择图片失败:', err.errMsg);}});},

打脸了,

在微信小程序中,FormData 不是一个内置的全局对象,所以你会看到 ReferenceError: FormData is not defined 这样的错误。在小程序中,你不需要创建 FormData 对象,因为 wx.uploadFile 方法会自动处理文件的上传。

	chooseImage(){wx.chooseMedia({count: 1, // 选择图片的数量,只需要选择一张图片mediaType: ['image'],sourceType: ['album'],success(res) {// 只关心第一张图片const tempFilePath = res.tempFiles[0].tempFilePath;wx.uploadFile({url: "http://127.0.0.1:5000/upimage", filePath: tempFilePath,name: 'file', // 与后端约定的文件对应的 key, success(uploadRes) {console.log('图片上传成功', uploadRes);// 这里可以处理上传成功后的逻辑,比如解析服务器返回的数据},fail(err) {console.error('图片上传请求错误:', err.errMsg);}});},fail(err) {console.error('选择图片失败:', err.errMsg);}});}

相关文章:

  • KKT实际运用 -MATLAB
  • 通信工程学习:什么是DQDB分布式队列双总线
  • 北京数字孪生工业互联网可视化技术,赋能新型工业化智能制造工厂
  • 基于微信小程序的健康管理系统(源码+定制+文档)
  • 【设计模式-策略】
  • 网络编程,tcp,守护进程化,前后台任务,bash与shell,会话
  • CSS中的字体样式、文本样式、列表样式以及背景和渐变
  • 基于基于微信小程序的社区订餐系统
  • 滚雪球学MySQL[2.3讲]:MySQL数据过滤与排序详解:WHERE条件、ORDER BY排序与LIMIT分页查询
  • 计算机网络自顶向下(2)----socket编程
  • 高精度(4)——高精度除法
  • 【MySQL】复合查询
  • 【2.使用VBA自动填充Excel工作表】
  • leetcode每日一题day19(24.9.29)——买票需要的时间
  • sql 时间交集
  • .pyc 想到的一些问题
  • Apache Pulsar 2.1 重磅发布
  • Flannel解读
  • js数组之filter
  • leetcode386. Lexicographical Numbers
  • Linux gpio口使用方法
  • linux安装openssl、swoole等扩展的具体步骤
  • Median of Two Sorted Arrays
  • node.js
  • October CMS - 快速入门 9 Images And Galleries
  • Python实现BT种子转化为磁力链接【实战】
  • QQ浏览器x5内核的兼容性问题
  • Selenium实战教程系列(二)---元素定位
  • Shadow DOM 内部构造及如何构建独立组件
  • vue--为什么data属性必须是一个函数
  • 测试开发系类之接口自动化测试
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 服务器之间,相同帐号,实现免密钥登录
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • elasticsearch-head插件安装
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​linux启动进程的方式
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #面试系列-腾讯后端一面
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (AngularJS)Angular 控制器之间通信初探
  • (done) Go 语言:三种多文件协作方式
  • (九)信息融合方式简介
  • (十三)MipMap
  • (转)c++ std::pair 与 std::make
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转载)虚函数剖析
  • /proc/vmstat 详解
  • @test注解_Spring 自定义注解你了解过吗?
  • @Transactional 详解
  • @软考考生,这份软考高分攻略你须知道