【uniapp小程序】uploadFile文件上传

简介: 上节中我们讲到小程序的request请求,掌握了基本的网络请求方式,这节我们通过小程序的uploadFile接口能力完成对小程序上传操作(uni.uploadFile,后端php接口),通过这一节你可以学习到php的上传接口的写法,以及如何配合前端完成一个小程序上传操作✨✨欢迎订阅本专栏或者关注我,大家一起努力每天一题算法题✨✨❤️❤️❤️ 最后,希望我的这篇文章能对你的有所帮助!愿自己还有你在未来的日子,保持学习,保持进步,保持热爱,奔赴山海!❤️❤️❤️。

写在前面

上节中我们讲到小程序的request请求,掌握了基本的网络请求方式,这节我们通过小程序的uploadFile接口能力完成对小程序上传操作(uni.uploadFile,后端php接口),通过这一节你可以学习到php的上传接口的写法,以及如何配合前端完成一个小程序上传操作

创建前端页面

我们默认使用创建新项目进行讲解,在index.vue最上方写入代码

<template>
    <view style="width: 750rpx;height: 200rpx;display: flex;flex-direction: column;">
    上传的文件名:
        <button type="primary" style="width: 500rpx;" @click="upload()">点击上传</button>
    </view>
</template>

通过前端点击“点击上传”来调用对应的方法

创建后运行如下
在这里插入图片描述
这里插一嘴,由于博主是全栈开发的,我给大家总结一下这部分与微信开发者工具 语法的区别
①uniapp必须用template标签嵌套
否则
在这里插入图片描述

②小程序点击事件用bindtap 而uniapp用@click
在这里插入图片描述

③uniapp的方法需要放在methods: {}里面
在这里插入图片描述

写入js事件(完成上传操作)

接下来我们在刚刚创建测试的方法upload中进行修改,首先整个动作原理是:通过点击按钮触发upload方法=》选择文件获取到本地的路径=》上传给服务器=》服务器返回上传的文件名(上传后随机生成的)
在这里插入图片描述
了解到整个流程后我们先将 文件进行选择
uni.chooseImage示例

            uni.chooseImage({
                success: (chooseImageRes) => {
                    const tempFilePaths = chooseImageRes.tempFilePaths;
                    console.log(tempFilePaths);
                }
            });

将代码放在unload中运行测试
在这里插入图片描述
可以看到已经生成了临时的文件

接下来我们通过uni.uploadFile方法完成对文件的上传

uni.uploadFile示例

uni.uploadFile({
            url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
            filePath: tempFilePaths[0],
            name: 'file',
            formData: {
                'user': 'test'
            },
            success: (uploadFileRes) => {
                console.log(uploadFileRes.data);
            }
        });

配置后端php接口文件

在写事件前,我通过在服务器上新建一个php文件作为文件上传的接口

新建tp_imgsrc.php
考虑到大多数初学者这里决定用原生php进行开发

<?php 
// 上传图片 
function uploadimg() { 
    $file = $_FILES['file'];
    if ($file) { 
        //var_dump($file);
        // 获取文件后缀名
        $ext = pathinfo($file['name'], PATHINFO_EXTENSION);
        $target = 'upload/' . uniqid() . '.' . $ext;
        // 转移图片地址
        if (!move_uploaded_file($file['tmp_name'], $target)) {
            $GLOBALS['error_message'] = '上传图片失败';
            echo error_message;
        }
       
         die(
        json_encode(
            array(
            'errCode' => 0,
            'error_message'=>'图片上传成功',
            'file'=>$target
        ),480)
);
      
    }
}


uploadimg();

完成后整个目录是这样的(层级关系)
在这里插入图片描述

实现上传功能

接下来 我们将刚刚的上传接口uni.uploadFile与文件选择接口uni.chooseImage合并一下完成整个流程,也就是选择文件完成后,将选择的文件上传

我们在upload方法中写入

let that=this;
            console.log("我被点击了");
            uni.chooseImage({
                success: (chooseImageRes) => {
                    const tempFilePaths = chooseImageRes.tempFilePaths;
                    console.log(tempFilePaths);
                    uni.uploadFile({
                                url: 'https://你的接口地址/tp_imgsrc.php', //仅为示例,非真实的接口地址
                                filePath: tempFilePaths[0],
                                name: 'file',
                                formData: {
                                    
                                },
                                success: (uploadFileRes) => {
                                    console.log(uploadFileRes.data);
                                }
                            });
                }
            });

测试运行看看
在这里插入图片描述
返回了文件名和我自己定义的返回码

可以看到服务器上也是存在这个文件的
在这里插入图片描述

完善上传功能

最重要的步骤我们已经做完了,那上传成功是不是得告诉下上传的用户告诉他们上传成功了?

于是我们需要做一下判断,当errCode==0的时候高速用户上传成功

但是发现了个问题,php返回的是数组,为啥到uniapp返回的是字符串?

在这里插入图片描述
指导我看了下官方的文档
在这里插入图片描述
返回的是字符类型

解决办法:

      let param_json = JSON.stringify(this.$data)//转为字符串
      let bookkeeping_data = JSON.parse(bookkeeping_data_string)//转换为JSON

测试后完美解决
改动到的代码

let json_data = JSON.parse(uploadFileRes.data)
console.log(json_data['errCode']);

在这里插入图片描述

接下来就可以将信息告诉用户是否上传成功了
uni.showToast示例

uni.showToast({
    title: '标题',
    icon:'none'
    duration: 2000
});

相应的代码:

                    let json_data = JSON.parse(uploadFileRes.data)
                                    console.log(json_data['errCode']);
                                    if (json_data['errCode']==0) {
                                        uni.showToast({
                                            title: json_data['error_message'],
                                            icon:'none',
                                            duration: 2000
                                        });
                                    } else{
                                        
                                    }

测试截图
在这里插入图片描述

完整的index.vue

<template>
    <view style="width: 750rpx;height: 200rpx;display: flex;flex-direction: column;">
    上传的文件名:
        <button type="primary" style="width: 500rpx;" @click="upload">点击上传</button>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                title: 'Hello'
            }
        },
        onLoad() {
         let that=this;
        uni.request({
            url: 'https://api.uomg.com/api/qq.info', //仅为示例,并非真实接口地址。
            data: {
                qq: '504113939'
            },
            header: {
                'Content-Type': 'application/json;charset=UTF-8' //自定义请求头信息
            },
            success: (res) => {
                console.log(res.data);
              
            }
        });
        },
        methods: {
        upload(){
            let that=this;
            console.log("我被点击了");
            uni.chooseImage({
                success: (chooseImageRes) => {
                    const tempFilePaths = chooseImageRes.tempFilePaths;
                    console.log(tempFilePaths);
                    uni.uploadFile({
                                url: 'https:/你的接口/tp_imgsrc.php', //仅为示例,非真实的接口地址
                                filePath: tempFilePaths[0],
                                name: 'file',
                                formData: {
                                    
                                },
                                success: (uploadFileRes) => {
                                    let json_data = JSON.parse(uploadFileRes.data)
                                    console.log(json_data['errCode']);
                                    if (json_data['errCode']==0) {
                                        uni.showToast({
                                            title: json_data['error_message'],
                                            icon:'none',
                                            duration: 2000
                                        });
                                    } else{
                                        
                                    }
                                }
                            });
                }
            });

        },
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
    }

    .logo {
        height: 200rpx;
        width: 200rpx;
        margin-top: 200rpx;
        margin-left: auto;
        margin-right: auto;
        margin-bottom: 50rpx;
    }

    .text-area {
        display: flex;
        justify-content: center;
    }

    .title {
        font-size: 36rpx;
        color: #8f8f94;
    }
</style>

最后

❤️❤️❤️❤️❤️❤️
🥳🥳🥳 茫茫人海千千万万,感谢这一刻你看到了我的文章,欢迎加入人工智能交流群(看我的动态),更多周边福利等你🥳🥳🥳

在这里插入图片描述
✨✨欢迎订阅本专栏或者关注我,大家一起努力每天一题算法题✨✨

❤️❤️❤️ 最后,希望我的这篇文章能对你的有所帮助!

愿自己还有你在未来的日子,保持学习,保持进步,保持热爱,奔赴山海! ❤️❤️❤️

相关文章
|
1月前
|
监控 前端开发 小程序
陪练,代练,护航,代打小程序源码/前端UNIAPP-VUE2.0开发 后端Thinkphp6管理/具备家政服务的综合型平台
这款APP通过技术创新,将代练、家政、娱乐社交等场景融合,打造“全能型生活服务生态圈”。以代练为切入点,提供模块化代码支持快速搭建平台,结合智能匹配与技能审核机制,拓展家政服务和商业管理功能。技术架构具备高安全性和扩展性,支持多业务复用,如押金冻结、录屏监控等功能跨领域应用。商业模式多元,包括交易抽成、增值服务及广告联名,同时设计跨领域积分体系提升用户粘性,实现生态共生与B端赋能。
103 11
|
4月前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
116 0
|
6月前
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。
|
6月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
132 0
在线课堂+工具组件小程序uniapp移动端源码
|
7月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
922 3
|
7月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
153 0
微信小程序更新提醒uniapp
|
7月前
|
移动开发 小程序 数据可视化
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
134 2
|
9月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
207 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
7月前
|
小程序 数据可视化 API
低代码可视化-uniapp商城首页小程序-代码生成器
低代码可视化-uniapp商城首页小程序-代码生成器
85 0
|
7月前
|
存储 移动开发 小程序
uniapp富文本editor输入二次扩展兼容微信小程序
uniapp富文本editor输入二次扩展兼容微信小程序
269 0

热门文章

最新文章