微信小程序上传本地文件 webview

我们通过查看微信官方文档

图片可以选择本地文件 但是文件不允许

文件只支持上传聊天中的文件 并不允许手机选择本地文件

这并不能满足我们使用的需要 但是我们可以通过webview来实现

这里需要注意的是我们需要将 网址配置到 域名白名单中 

web-view | 微信开放文档

案例使用:微信小程序 vue项目

原理:

小程序通过webview 内嵌网页端的上传文件网页地址 

通过内嵌的网页将 文件传输到后端 ,后端返回文件地址及文件信息的列表

网页端通过导入的weinxin-js-sdk包 调用其中的postMessage 函数 将文件信息&文件地址传回小程序

小程序接收到信息会调用 bindMessage的postMessage方法

传参就是 文件信息 然后我们将文件展示出来就好啦       

 

 web网页-vue设置:

方法1:script 找到index.html  将jssdk写入

    <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>

 方法2:或者npm 下载jsdk

npm install weixin-js-sdk --save
import wx from 'weixin-js-sdk'

正式开始:我们在web网页中的上传文件的按钮click 上传文件方法 

import { wxUploadFile } from '@/api/files'
..... 
 methods: {
    //这里就是正常的上传文件流的方法 wxUploadFile是后端给你的上传文件的地址请求
    uploadFile (info) {
      const { file } = info
      const formData = new FormData()
      formData.append('file', file)
      wxUploadFile(formData).then((res) => {
        //这里将上传后的文件信息 res 将调用jsdk 将文件信息res通过postMessage发回给小程序
        window.wx.miniProgram.postMessage({ data: res });
        // 如果使用过的npm 这里不需要加window
      })
    },
}
...

 wxUploadFile文件 (其实就是正常的文件上传)

export function wxUploadFile (data, onUploadProgress = null) {
  const url ='http.....'//这里web上传文件的地址
  return axios({
    url,
    method: 'post',
    data,
    onUploadProgress,
    timeout: 60000,
  })
}

 

 小程序设置:

这里直接新建一个单独文件地址 因为webview需要占用整个屏幕

当我们需要使用的时候跳转到这个upload文件路由就可以了

名字可以随便起 不建议取名为upload 的哈哈哈哈哈哈

设置index-wxml:

这里的src是web网页写好的上传文件的地址(就是刚刚那个网页的地址)

小程序- index.ts:

写一个函数postMessage (就是正常的函数)

到此处我们就可以获取到上传的文件信息了

可以看到小程序已经打印出了文件信息

这个时候我们就可以小程序postMessage在mesage里e.detail获取刚刚上传的两个文件

小程序后台设置:

设置了webview需要在小程序后台设置白名单才可以在线上正常使用  开发环境没有限制都可以 

但是一旦上传 就会出现 xxxx地址不可用 请联系小程序管理员

我们登录小程序管理员

下载校验文件到域名名下(这一步需要找后端存放)

例如文件xiaoyan.text

需要将文件配置为 http://baidu.com/xiaoyan.text

然后等待 24h 内 腾讯监测到就可以 正常使用啦~

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
微信小程序webview中,要实现文件下载功能,可以通过以下步骤进行操作: 1. 在小程序webview中,可以使用标准的HTML元素`<a>`来触发文件下载。首先,在小程序webview页面中,添加一个下载按钮或者链接,例如: ```html <a href="https://example.com/path/to/file.pdf" download>点击下载文件</a> ``` 其中`https://example.com/path/to/file.pdf`是要下载的文件的URL,`download`属性表示要下载文件而不是在浏览器中打开。 2. 在小程序webview页面的JS代码中,可以监听这个下载链接的点击事件,并在点击时触发文件下载。例如: ```javascript document.querySelector('a').addEventListener('click', function(e) { e.preventDefault(); // 阻止默认的链接跳转行为 var url = this.getAttribute('href'); wx.downloadFile({ url: url, success: function(res) { var filePath = res.tempFilePath; // 下载后的临时文件路径 wx.saveFile({ tempFilePath: filePath, success: function(res) { var savedFilePath = res.savedFilePath; // 保存后的文件路径 // 文件保存成功后的操作 }, fail: function(res) { // 文件保存失败后的操作 } }); }, fail: function(res) { // 文件下载失败后的操作 } }); }); ``` 以上代码中,`document.querySelector('a')`用于获取第一个`<a>`元素,根据实际情况可能需要修改选择器;`wx.downloadFile`用于下载文件,`wx.saveFile`用于保存文件到本地。 需要注意的是,下载文件需要在小程序的`app.json`配置文件中添加相应的权限设置,例如: ```json { "mp-weixin": { "permission": { "scope.userLocation": { "desc": "获取您的地理位置信息将用于小程序定位" }, "scope.writePhotosAlbum": { "desc": "保存图片到相册" }, "scope.camera": { "desc": "拍摄照片或者录像" }, "scope.record": { "desc": "录制音频" }, "scope.userInfo": { "desc": "获取您的基本信息将用于小程序登录" }, "scope.userLocationBackground": { "desc": "获取您的地理位置信息将用于小程序定位" }, "scope.invoiceTitle": { "desc": "获取你发票抬头" }, "scope.invoice": { "desc": "获取你发票" }, "scope.werun": { "desc": "微信运动步数" }, "scope.writeVideosAlbum": { "desc": "保存视频到相册" } } } } ``` 以上是在微信小程序webview中实现文件下载的一种方式,你可以根据具体需求进行调整和扩展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值