写在前面

上节中我们讲到小程序的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>

到此这篇关于微信小程序uploadFile接口实现文件上传的文章就介绍到这了,更多相关小程序uploadFile内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

微信小程序uploadFile接口实现文件上传的更多相关文章

  1. 微信小程序“圣诞帽”的实现思路详解

    这两天朋友圈被圣诞帽刷屏,下面通过本文给大家分享微信小程序“圣诞帽”的实现思路详解,需要的朋友参考下吧

  2. Swift - 自定义UIActivity分享

    UIActivity可以十分方便地将文字、图片等内容进行分享,比如分享到微信、微博、发送邮件、短信等等。下面通过继承UIActivity实现定制按钮和功能,通过调用UIActivityViewController来展示分享框。,NSURL]//新建自定义的分享对象数组acts=[WeiXinActivity(),147)!important;font-family:Consolas,UIActivityTypePrintUIActivityTypeAssignToContactUIActivityType

  3. android – 使用OkHttp或Retrofit将文件上传到AWS S3存储桶

    是否有使用Square的OkHttp库或Retrofit库将文件上传到S3存储桶的示例?我正在寻找一些示例,我可以使用预先签名的查询使用这些库上传文件.解决方法我或多或少地从一些预生产代码中复制了这个:

  4. php微信公众平台交互与接口详解

    这篇文章主要为大家详细介绍了php微信公众平台开发,交互与接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. 小程序实现图片裁剪上传

    这篇文章主要为大家详细介绍了小程序实现图片裁剪上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  6. php版微信数据统计接口用法示例

    这篇文章主要介绍了php版微信数据统计接口用法,结合实例形式分析了php微信数据统计接口功能及相关的使用技巧,需要的朋友可以参考下

  7. PHP仿微信发红包领红包效果

    最近项目开发要求实现红包功能,仿微信(不含留言),但只能使用余额发红包。下面小编给大家分享PHP仿微信发红包领红包效果,感兴趣的朋友一起看看吧

  8. NodeJS使用formidable实现文件上传

    这篇文章主要为大家详细介绍了NodeJS使用formidable实现文件上传的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. 基于Python实现微信自动回复功能

    这篇文章主要为大家详细介绍了Python如何通过WechatPCAPI来实现微信自动回复的功能,文中的示例代码讲解详细,快跟随小编一起动手尝试一下

  10. php实现小程序支付完整版

    这篇文章主要为大家详细介绍了php实现小程序支付完整版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部