aliyunoss文件上传微信小程序
时间: 2025-06-28 18:12:13 浏览: 10
### 微信小程序使用阿里云OSS实现文件上传
#### 获取上传所需参数
为了使微信小程序能够安全有效地上传文件到阿里云OSS,通常的做法是从后端获取必要的上传参数。这些参数包括`fileName`, `policy`, `accessKeyId`, `signature`, 和 `host`[^2]。
#### 后端接口设计
后端应提供一个API来返回上述提到的必要参数给前端应用。对于PHP环境下的实现方案,可以参考如下代码片段:
```php
<?php
// 这里省略了实际连接数据库和其他初始化操作
$bucket = 'your-bucket-name';
$dir = date('Ymd') . '/'; // 自定义目录前缀
$expire_time = 30; // 设置过期时间
$endPoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 替换成自己的区域节点地址
$accessKeyID = "your-access-key-id";
$accessKeySecret = "your-access-key-secret";
$now = time();
$expiration = $now + intval($expire_time);
$condition = array(
0 => array("starts-with", "$", $dir),
);
$conditions[] = array("content-length-range", 0, 10485760); // 文件大小限制
$policyArr = array(
'expiration' => gmdate("Y-m-d\TH:i:s\Z", $expiration),
'conditions' => $condition,
);
$policyStr = json_encode($policyArr);
$base64PolicyStr = base64_encode($policyStr);
$stringToSign = $base64PolicyStr;
$sign = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret, true));
$result['host'] = $endPoint;
$result['policy'] = $base64PolicyStr;
$result['signature'] = $sign;
$result['accessid'] = $accessKeyID;
echo json_encode($result);
?>
```
这段脚本会生成用于签署请求所必需的信息,并将其作为JSON响应发送回客户端应用程序[^3]。
#### 小程序前端逻辑处理
在接收到由服务器提供的认证信息之后,就可以利用Aliyun OSS JavaScript SDK来进行文件上传工作了。下面是一个简单的例子展示如何完成这一过程:
```javascript
const app = getApp();
Page({
data: {
filePath: '',
uploadTask: null,
},
chooseImage() {
wx.chooseMedia({
count: 1,
mediaType: ['image'],
sourceType: ['album', 'camera'],
success(res) {
this.setData({filePath: res.tempFiles[0].tempFilePath});
// 调用函数发起网络请求获得签名数据...
wx.request({
url: `${app.globalData.serverUrl}/get-signature`,
method: 'GET',
success(response){
const { host, policy, signature, accessid } = response.data;
let fileName = new Date().getTime(); // 可自定义命名规则
this.uploadFile(host, policy, signature, accessid, fileName);
}.bind(this)
});
}.bind(this)
})
},
uploadFile(host, policy, signature, accessid, filename) {
var that = this;
this.setData({
uploadTask: wx.uploadFile({
url: host,
filePath: this.data.filePath,
name: 'file',
formData:{
key : `${filename}`,
policy,
OSSAccessKeyId: accessid,
signature,
success_action_status:'200'
},
success (res){
console.log(`Upload succeeded! Status code:${res.statusCode}`);
if (res.statusCode === 200 || res.statusCode === 204) {
wx.showToast({
title: '上传成功!',
icon: 'success'
});
}
},
fail(err){
console.error('Failed to upload:', err.errMsg);
}
})
});
}
})
```
此部分展示了怎样选取一张照片并通过HTTP POST的方式提交至指定的目标URL上。注意这里的`key`字段指定了最终保存于OSS内的路径名;而其他几个表单域则携带了之前从小程序向后端索取来的授权凭证[^4]。
阅读全文