概览
下载安装支付宝小程序IDE
小程序下载页面
开通并配置阿里云oss_bucket跨域
通过示例demo测试并获取上传需要的签名(signature)和加密策略(policy)
下载web直传demo
[oss-h5-upload-js-direct.zip](https://www.yuque.com/attachments/yuque/0/2019/zip/201986/1564113232458-d6be6101-3e90-4fb7-bd63-6243eaf10962.zip?_lake_card=%7B%22uid%22%3A%22rc-upload-1564112886134-10%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2019%2Fzip%2F201986%2F1564113232458-d6be6101-3e90-4fb7-bd63-6243eaf10962.zip%22%2C%22name%22%3A%22oss-h5-upload-js-direct.zip%22%2C%22size%22%3A351978%2C%22type%22%3A%22application%2Fx-zip-compressed%22%2C%22ext%22%3A%22zip%22%2C%22progress%22%3A%7B%22percent%22%3A0%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22aDU35%22%2C%22card%22%3A%22file%22%7D)
按照配置说明配置upload.js文件
![image.png](https://cdn.nlark.com/yuque/0/2019/png/201986/1564113369040-50c41fad-77fc-4153-8cb9-715859b03217.png#align=left&display=inline&height=64&margin=%5Bobject%20Object%5D&name=image.png&originHeight=114&originWidth=544&size=13521&status=done&style=none&width=307)![image.png](https://cdn.nlark.com/yuque/0/2019/png/201986/1564113430014-e0d26a2d-9ad5-4280-a28a-07de92052f20.png#align=left&display=inline&height=77&margin=%5Bobject%20Object%5D&name=image.png&originHeight=112&originWidth=565&size=15349&status=done&style=none&width=387)
字段说明
- accessid : accessid
- accesskey: accesskey
host: Bucket域名(非EndPoint)
通过示例demo
示例请求头
```yaml
General
Request URL: http://zhufubao.oss-cn-beijing.aliyuncs.com/ Request Method: POST Status Code: 200 OK Remote Address: 59.110.190.29:80 Referrer Policy: no-referrer-when-downgrade
Repons Headers
Access-Control-Allow-Methods: GET, POST, PUT, HEAD, DELETE Access-Control-Allow-Origin: * Access-Control-Expose-Headers: etag, x-oss-request-id Access-Control-Max-Age: 0 Connection: keep-alive Content-Length: 0 Content-MD5: C1pYYZJo0Qqh/4YpcQtbbg== Date: Thu, 25 Jul 2019 00:28:54 GMT ETag: “0B5A58619268D10AA1FF8629710B5B6E” Server: AliyunOSS x-oss-hash-crc64ecma: 9209453800795768232 x-oss-request-id: 5D38F7C55B40CCDBF4DB6FD9 x-oss-server-time: 25
Request Headers
Provisional headers are shown Content-Type: multipart/form-data; boundary=——WebKitFormBoundarygxUvBqLDZHl9ZqTY Origin: null User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
Form data:
name: DNF.ico key: ${filename} policy: == OSSAccessKeyId: success_action_status: 200 signature: ** file: (binary)
<a name="HMyPZ"></a>
## 创建并配置uploadFile项目demo
<a name="9ooqB"></a>
#### 新建test项目(不启用云服务)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/201986/1564114506230-f6863a3d-8fff-4455-9a30-322be807803b.png#align=left&display=inline&height=279&margin=%5Bobject%20Object%5D&name=image.png&originHeight=436&originWidth=406&size=35437&status=done&style=none&width=260)![image.png](https://cdn.nlark.com/yuque/0/2019/png/201986/1564114589357-15fd7a7e-689c-4c63-939e-941ff939c9bc.png#align=left&display=inline&height=148&margin=%5Bobject%20Object%5D&name=image.png&originHeight=259&originWidth=581&size=15017&status=done&style=none&width=332)
<a name="YWOyi"></a>
#### 编辑视图文件 /page/index/index.axml
```javascript
<view> uploadFile </view>
<button onTap="uploadFile"> Click me! Upload File </button>
编辑逻辑文件 /pages/index/index.js
Page({
uploadFile() {
my.chooseImage({
chooseImage: 1,
success: res => {
const path = res.apFilePaths[0];
console.log(path);
my.uploadFile({
url: 'https://zhufubao.oss-cn-beijing.aliyuncs.com',
fileType: 'image',
fileName: 'file',
filePath: path,
formData: {
key: res.apFilePaths[0], //上传到OSS的Object名称。 如果名称包含路径,如a/b/c/b.jpg, 则OSS会自动创建相应的文件夹。
policy: '',
OSSAccessKeyId: '',
signature: '',
success_action_status: 200 //不设置上传成功后则反馈204状态码
},
success: res => {
my.alert({ title: '上传成功' });
},
fail: function(res) {
my.alert({ title: '上传失败' });
},
});
},
});
},
});
调试上传需要注意的几个地方
- ‘,’注意中英文
- 调试面板查看的204状态码为文件已成功上传
- 主页文件在index.js,有关小程序的文件结构详情参考
视频
f&q
web直传demo报错
Error xml:<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>You have no right to access this object because of bucket acl.</Message>
<RequestId>5D38EAF3B619A0AE40B6C2D9</RequestId>
<HostId>post-test.oss-cn-hangzhou.aliyuncs.com</HostId>
</Error>
值得注意的是upload.js文件的 host字段 格式为bucket.endpoint 其中bucket需要和自己创建的bucket名称相吻合
**
小程序中的formData能否不配置验证字段?
policy: '',
OSSAccessKeyId: '',
signature: ''
Q:可以,bucket设置为公共读写即可,但是oos跨域设置必须要配置。uploadFile的参数字段传递详情参考
accessid,accesskey如何获取
Q:阿里云验证机制,具体可参考官方文档