首页 > 编程语言 >微信小程序上传本地文件

微信小程序上传本地文件

时间:2022-12-19 11:12:51浏览次数:85  
标签:文件 container 微信 xxx 本地 res var 上传

由于微信小程序只提供了wx.chooseImage(选择图片)与wx.chooseMessageFile(选择消息列表文件)这两个API,当我们想要上传本地文件的时候,只有通过在小程序嵌入H5页面进行本地文件上传

H5界面展示

小程序界面

  • template
<web-view :src="url" @message="handlePostMessage"></web-view>
  • script
data() {
  return {
    url:'https://xxx.xxx.xxx/xxx?token='+xxx
  }
},
methods: {
  handlePostMessage(e){
    console.log('e----',e.detail.data[0].res)
    //对H5返回的数据做处理
  }
}

H5界面

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <script
            type="text/javascript"
            src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"
        ></script>
        <script
            type="text/javascript"
            src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"
        ></script>
        <style>
            .btn_group {
                display: flex;
                flex-direction: row;
                justify-content: space-around;
            }
            .choose_container {
                flex: 1;
                padding: 10px 15px;
                border: 1px solid #e4e4e4;
                border-radius: 6px;
                background-color: #fff;
                color: black;
                margin-right: 20px;
            }
            .upload_container {
                flex: 1;
                padding: 10px 15px;
                border: 1px solid #e4e4e4;
                border-radius: 6px;
                background-color: #01b377;
                color: white;
            }
            input[type='file'] {
                display: none;
            }
            #list_container {
                margin: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box_container">
            <input type="file" name="upfile" id="upfile" />
            <div class="btn_group">
                <button class="choose_container">选择文件</button>
                <button class="upload_container">上传文件</button>
            </div>
            <div id="list_container"></div>
        </div>
        <script>
            var token = window.location.search.split('=')[1];
            // 文件上传后缀
            var suffixList = [
                'doc',
                'docx',
                'xls',
                'xlsx',
                'ppt',
                'pptx',
                'pdf',
            ];
            // 选择文件
            var chooseBtn =document.getElementsByClassName('choose_container')[0];
            var upIpt = document.getElementById('upfile');
            var list = document.getElementById('list_container');
            chooseBtn.addEventListener('click', function () {
                upIpt.click();
            });
            var upFileList;
            upIpt.addEventListener('change', function (res) {
                upFileList = res.target.files;
                if (res.target.files.length > 0) {
                    list.innerText = res.target.files[0].name;
                }
            });
            // 上传文件
            var upBtn = document.getElementsByClassName('upload_container')[0];
            upBtn.addEventListener('click', function () {
                let fileName = upFileList[0].name;
                let lastIndexOf = fileName.lastIndexOf('.') + 1;
                //获取文件的后缀名 txt|...
                let suffix = fileName.substring(lastIndexOf);
                if (suffixList.includes(suffix)) {
                    let fd = new FormData();
                    fd.append('file', upFileList[0]);
                    fetch('xxx', {
                        method: 'POST',
                        body: fd,
                        headers: {
                            Authorization: 'Bearer ' + token,
                        },
                    })
                        .then((response) => response.json())
                        .then((res) => {
                            wx.miniProgram.postMessage({
                                data: {
                                    res: res,
                                },
                            });
                            wx.miniProgram.navigateBack({ delta: 1 });
                        })
                        .catch((err) => {
                            console.log('fetch error', err);
                        });
                } else {
                    console.log('文件上传格式不符合要求');
                }
            });
        </script>
    </body>
</html>

注意事项

  • 直接使用fetch时,注意要对返回的数据进行解析
  • 需要在小程序的业务白名单中加入部署的H5地址

标签:文件,container,微信,xxx,本地,res,var,上传
From: https://www.cnblogs.com/nicoz/p/16991603.html

相关文章

  • 006.Git如何删除本地仓库
    Git如何删除本地仓库想要删除本地的git仓库,其实很简单,只需要删除目录下的.git文件就可以。前往想要删除git仓库的目录。执行以下命令。rm-rf.git......
  • PHP-Laravel支付宝支付和微信支付
    支付宝注册首先要注册两个平台账号,一个是支付宝商户平台,一个是支付宝开放平台,需要企业账号实名认证,免费。没有条件的可以是用支付宝模拟沙箱进行测试。开发前置支......
  • 虚拟机栈和本地方法栈的简单介绍
    Java虚拟机栈(JavaVirtualMachineStacks)也是线程私有的,即生命周期和线程相同。Java虚拟机栈和线程同时创建,用于存储栈帧。每个方法在执行时都会创建一个栈帧(StackFra......
  • selenium借助AutoIt识别上传(下载)详解
    AutoIt目前最新是v3版本,这是一个使用类似BASIC​​脚本语言​​​的​​免费软件​​​,它设计用于Windows GUI(​​图形用户界面​​)中进行自动化操作。它利用模拟键盘......
  • 微信电脑版 v3.8.1.25 绿色便携版
    修改历史:2022.12.14:自改官方3.8.1.25最新正式版本2022.08.30:自改官方3.7.6.29最新正式版本2022.06.15:自改官方3.6.0.18最新正式版本2022.03.19:自改官方3.5.0.46最......
  • #yyds干货盘点#【愚公系列】2022年09月 微信小程序-WebGL画正方形
    前言WebGL(全写WebGraphicsLibrary)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGLES2.0结合在一起,通过增加OpenGLES2.0的一个JavaScript绑定,WebGL可以为......
  • 转贴:使用GetText本地化编程
       参考​​http://heavenporter.livejournal.com/5939.html​​GetText是GNU的一个项目,​​GetText主页​​有最丰富的信息。下面大致翻译一下GetText主页的介绍:“......
  • 学习ASP.NET Core Blazor编程系列十七——文件上传(上)
    学习ASP.NETCoreBlazor编程系列文章之目录学习ASP.NETCoreBlazor编程系列一——综述学习ASP.NETCoreBlazor编程系列二——第一个Blazor应用程序(上)学习A......
  • 新版微社群微信付费入群vip社群空间站带分销付费进群PHP源码架构分析
    付费报名群系统。支持创建各种付费群、吃瓜、创业、资源等。支付对接第三方易支付或码支付,可对接任何易支付平台。群码可在后台直接上传,简单易操作。不需要公众号,不需要商家......
  • windows 本地搭建Mysql服务
    1.从服务器下载最新的版本https://downloads.mysql.com/archives/community/ 2.解压到本地文件 3.配置系统变量MYSQL_HOME值是本地的地址D:\Program\mysql-8.0.......