my.chooseimage(object object)
主体: 企业支付宝小程序 、 个人支付宝小程序
从本地相册选择图片或使用相机拍照。
object object
查看示例
属性 | 类型 | 默认值 | 必填 | 兼容性 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | number | 1 | 否 | - | 最多可选择的图片张数 |
||||||||||
sizetype | array |
["original","compressed"] | 否 | 基础库: 1.0/2.3.1 |
图片类型 |
||||||||||
|
|||||||||||||||
sourcetype | string | array |
["camera","album"] | 否 | - | 选择图片的来源 |
||||||||||
|
|||||||||||||||
highquality | boolean | true | 否 | 安卓: 10.2.58 |
是否启用高画质模式。此参数仅供安卓使用。 |
||||||||||
usefrontcamera | boolean | false | 否 | - | 是否默认使用前置摄像头 |
||||||||||
success | function | - | 否 | - | 调用成功的回调函数 |
||||||||||
fail | function | - | 否 | - | 调用失败的回调函数 |
||||||||||
complete | function | - | 否 | - | 调用结束的回调函数(调用成功、失败都会执行) |
success 回调函数
参数
object res
查看示例
属性 | 类型 | 兼容性 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
apfilepaths | array |
- | 图片的 本地临时文件 路径列表 |
||||||||||
tempfilepaths | array |
- | 图片的 本地临时文件 路径列表 |
||||||||||
tempfiles | object | 基础库: 1.0/2.3.1 |
图片的 本地临时文件 列表 |
||||||||||
|
fail 回调的参数为 object,error
属性为错误码,errormessage
属性为错误消息。
错误码 | 错误消息 | 凯发app官方网站的解决方案 |
---|---|---|
11 | 用户取消操作。 | 用户正常交互流程,不需要特殊处理。 |
14 | 无摄像头权限 | 用户没开启系统相机权限,可以调用 my.showauthguide 引导用户开启相关系统权限。 |
15 | 没有开启相册权限。/ no permission to read storage. | 用户没开启系统相册权限 / 用户没有授权文件和媒体写入权限。 |
2001 | 用户不允许授权。 |
用户拒绝为当前小程序授权。 请在交互中考虑此情况。如有需要,请向用户强调该授权的必要性。 |
2002 | 用户拒绝为当前小程序授权,并勾选了“总是保持以上选择”后,再次调用授权接口产生的报错。 |
如有需要,提醒或引导用户手动授权:小程序右上角胶囊按钮->设置->打开权限开关;或者通过调用 my.opensetting 帮助用户打开设置页面。 |
2003 | 用户勾选了不允许授权选项。 |
如有需要,提醒或引导用户手动授权:小程序右上角胶囊按钮->设置->打开权限开关;或者通过调用 my.opensetting 帮助用户打开设置页面。 |
my.chooseimage ({
// 可以根据您的业务按需选择使用 ['album'] 或 ['camera'] 或 ['album', 'camera']
sourcetype: ['album'],
success: function (res) {
console.log (res);
},
fail: function (err) {
console.log (err);
},
});
my.chooseimage ({
success: function (res) {
console.log ('chooseimage: success', res);
my.detectfiletype ({
filepath: res.tempfilepaths[0],
success (res) {
console.log ('detectfiletype: success', res);
},
fail (err) {
console.log ('detectfiletype: fail', err);
},
});
},
fail: function (err) {
console.log ('chooseimage: fail', err);
},
});
{
"tempfilepaths": ["https://resource/89a1fa17993b2602bec1e88f4a062ec03.image"],
"tempfiles": [
{
"creationdate": 1684745836000,
"path": "https://resource/89a1fa17993b2602bec1e88f4a062ec03.image",
"size": 1807640
}
],
"apfilepaths": ["https://resource/89a1fa17993b2602bec1e88f4a062ec03.image"],
"apfilepathsv2": ["https://resource/89a1fa17993b2602bec1e88f4a062ec03.image"],
"scene": "album"
}
{
"error": 11,
"errormessage": "用户取消操作。"
}
-
tip出于数据安全考虑, iot 小程序禁止调用摄像头;请勿在 iot 小程序上调用此 api,否则会造成小程序异常。
-
tip图片的路径数组文件扩展名并非为文件真实类型,在真机上扩展名是 .image ,在 ide 上扩展名由文件实际类型决定。 若需判断文件实际扩展名,可使用 my.detectfiletype 进行查询,请以此接口返回结果为准,不过需注意此接口仅限真机调试,可参考上方示例代码。
-
bug支付宝客户端 10.5.0 版本之前,安卓、ios 两端用户拒绝系统授权相关权限 与 用户取消操作 报错一致。
-
tiphighquality 参数设置为 false,安卓部分机型拍照时移动手机会出现图片拼接的情况。如非对拍照速度要求特别高的场景,建议设置 highquality 为 true。
-
tipios 上如果设备内存紧张而用户选择的图片超大/过多,可能会出现页面白屏/重新加载(页面数据和状态丢失)的情况,需要在应用层设法规避或提醒用户。
q:通过 my.chooseimage 选中的文件如何转换为 base64?
可以使用 filesystemmanager.readfile 先读取文件内容,然后调用 my.arraybuffertobase64。示例如下:
my.chooseimage({
success: (res) => {
const fs = my.getfilesystemmanager();
fs.readfile({
// readfile 不传入 encodding 参数,则以 arraybuffer 方式读取
filepath: `${res.tempfilepaths[0]}`,
success: ({ data }) => {
const base64 = my.arraybuffertobase64(data);
console.log("base64", base64);
},
});
},
});
q:如果系统权限未开启,接口调用报错,如何引导开启系统权限?
由于安卓和 ios 有系统差异,两端引导方式也有差异,建议如下:
- ios:可以调用 my.showauthguide 引导用户开启相关系统权限。
- 安卓:自行通过界面和弹框引导用户在系统设置中为支付宝开启存储写入权限。