小程序上传文件至云存储的实现
作者:前端王睿 发布时间:2024-10-30 11:19:55
标签:小程序,上传文件,云存储
在小程序云开发中,要实现上传文件至云存储,有两种方案:云函数和HTTP API,前者是在小程序内调用的,而后者则是在小程序外调用的。本文主要讲讲如何使用HTTP API实现小程序外上传文件至云存储。
一、原料
① 小程序HTTP API
② PHP
③ Vue.js + Element UI
HTTP API需要在服务器端发起调用,而这里我选择的后端语言是PHP。
Element UI只是作为前端举例,我们可以用它的Upload组件来上传文件,如果是原生上传则直接用input file即可。
二、PHP调用小程序HTTP API
// 获取access_token
function getAccessToken(){
// APPID和SECRET均可在小程序后台获取
$appid = 'APPID';
$secret = 'SECRET';
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".
$appid ."&secret=". $secret;
$res = curl_get($url); // 使用GET方式请求微信接口
$res = json_decode($res,1);
return $res['access_token'];
}
// 上传文件到小程序云存储
function upload(){
$path = $_REQUEST['path'];
$url = "https://api.weixin.qq.com/tcb/uploadfile?access_token=". getAccessToken();
$data = array ('path' => $path,'env' => APP_CLOUD_ID); // APP_CLOUD_ID是你小程序的云环境ID
$res = json_decode(request($url, $data),1);
$fileName = $_FILES['file']['tmp_name'];
$handle = fopen($fileName,"r");
$file = fread($handle,filesize($fileName));
curl_post(
$res['url'],
array (
'key' => $path,
'Signature' => $res['authorization'],
'x-cos-security-token' => $res['token'],
'x-cos-meta-fileid' => $res['cos_file_id'],
'file' => $file,
)
);
echo json_encode(array(
'code' => 200,
'msg' => '文件上传成功',
'data' => $res['file_id']
));
}
// get请求
function curl_get($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
return curl_exec($ch);
curl_close($ch);
}
// post请求
function curl_post($url, $data){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
return curl_exec($ch);
curl_close($ch);
}
有关文件上传的HTTP API具体用法可参考:获取文件上传链接
三、使用Element UI调用PHP接口
// VueJS
<template>
<el-upload
class="avatar-uploader"
:action=""
accept="image/*,.jpg"
:http-request="upload"
:show-file-list="false"
>
<img v-if="image" :src="image" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</template>
<script>
import axios from 'axios'
const request = axios.create({
baseURL: process.env.BASE_API, // api 的 base_url
timeout: 20000
});
export default {
data() {
return {
image: ''
};
},
methods: {
async upload(e) {
let formData = new FormData();
let path = `upload/${new Date().getTime() + e.file.name.match(/\.(.*)/)[0]}`;
formData.append("path", path);
formData.append("file", e.file);
await request({
url: '/api/upload', // php提供的上传接口
method: 'post',
headers: {
"Content-Type": "multipart/form-data",//设置headers
},
data: formData
});
this.image = '【小程序云存储域名】' + path;
}
};
</script>
结束语
以上仅仅只是最近项目的摘录和总结,由于涉及到一些项目隐私,所以代码并不是特别完整,但大体思路就是如此,已通过实践检验可行,希望对一些正好有此需求的朋友有所帮助!
来源:https://www.jianshu.com/p/96b45f242d97


猜你喜欢
- 使用JS实现在图片上显示左右箭头的翻页代码,预览效果网址:http://www.keleyi.com/keleyi/phtml/picnex
- 通过一条命令用Npm安装gulp-htmlmin:npm install gulp-htmlmin --save-dev安装完毕后,打开gu
- //冒泡排序func mpSort(array []int) { for i:=0;i<len(array);i++ {
- 本文实例为大家分享了Python基于Socket实现简单聊天室,供大家参考,具体内容如下服务端#!/usr/bin/env python#
- asp使用WScript.Shell获取电脑的网络配置信息Option Explicit Dim WSHShe
- DCL(Data Control Language):数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。一、管理用户1、创建用户
- Django 开发项目是很快的,有多快?看完本篇文章,你就知道了。安装 Django前提条件:已安装 Python。Django 使用 pi
- 前面我们给了Tkinter接管Python输入和输出的介绍,我们不难可以想到,能用Tkinter来开发自己的Python代码编辑器.例如可以
- 最近项目很忙没机会更新博客。有朋友在和我谈学艺术的就业问题,就随便谈一下自己的想法。每年中国美院报考的人数与日俱增,越来越多的人投入到艺术设
- 在项目开发中,经常出现这样的需求。在新增或修改一个主表数据时,对应的从表也要进行同步,此时我们是怎么操作的了?典型的方法就是对于主表的各数据
- 最近的一个页面中碰到的,本来想用 border 来模拟设计图的虚线效果,但是很明显 border 效果不如设计图来的好看。顺便研究了下 da
- python作为一门动态语言,在使用变量之前是不需要进行定义,而是通过动态绑定的方法将变量绑定为某种类型。这样做为我们使用变量时提供了方便,
- 一、什么是数字识别? 所谓的数字识别,就是使用算法自动识别出图片中的数字。具体的效果如下图所示:上图展示了算法的处理效果,算法能够自动的识
- 1. 折线图折线图(Line Chart)是一种将数据点按照顺序连接起来的图形,也可以看作是将散点图按照X轴坐标顺序链接起来的图形。折线图的
- 每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式。 举个例子,在这行URLConf中:(r'^artic
- python和C/C++混合编程,推荐使用python的内置模块ctypes,从名字上可以看出是c,可见对C++的支持并不太好。一般的步骤:
- 昨天给公司服务器重做了一下系统,遇到Asp附件无法上传,之前服务器上使用好好的,怎么重做了就不正常了,于是一番google,baidu,下面
- 1、引言小 * 丝:鱼哥,你说这就快到圣诞节了,我应该送女神什么礼物呢?小鱼:你的女神又不缺什么礼物,倒不如送点惊喜?小 * 丝:送什么惊喜呢?小鱼
- 本文实例讲述了Python读取Pickle文件信息并计算与当前时间间隔的方法。分享给大家供大家参考,具体如下:python—–读取Pickl
- 流程比较简单,主要有以下步骤:注册插件(按钮、Lang、htmlTags、插件脚本)基于media插件代码修改注册插件首先,全局配置kind