本文档主要介绍OSS React Native SDK的安装和使用。本文档假设您已经开通了阿里云OSS 服务,并创建了Access Key ID 和Access Key Secret。文中的ID 指的是Access Key ID,KEY 指的是Access Key Secret。如果您还没有开通或者还不了解OSS,请登录OSS产品主页获取更多的帮助。
注意: react-native版本建议0.44.0及以上,建议使用fackebook官方react-native-cli或者create-react-native-app脚手架进行react native项目构建。aliyun-oss-react-native可通过npm或者yarn安装
npm install aliyun-oss-react-native --save
yarn install aliyun-oss-react-native --save
react native项目下运行react-native link
命令
react-native link
注意:由于react native脚手架不同版本的问题,有时候自动安装可能会失败,可手动添加android和iOS的的依赖库。同样为了兼容IPv6-Only网络,iOS工程中需参考aliyun-oss-ios-sdk说明中引入以下包。
1. libresolv.tbd
2. CoreTelephony.framework
3. SystemConfiguration.framework
CocoaPods
pod 'aliyun-oss-react-native', :path => '../node_modules/aliyun-oss-react-native'
`
非CocoaPods
Add Files to <...>
进入 node_modules
➜ aliyun-oss-react-native
➜ ios
➜ select RNAliyunOSS.xcodeproj
RNAliyunOSS.a
to Build Phases -> Link Binary With Libraries
settings.gradle
gradle
include ':aliyun-oss-react-native'
project(':aliyun-oss-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/aliyun-oss-react-native/android')
build.gradle
dependencies {
compile project(':aliyun-oss-react-native')
}
MainApplication.java
import com.reactlibrary.RNAliyunOssPackage;
public class MainApplication extends Application implements ReactApplication {
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new ImagePickerPackage(),
new RNAliyunOssPackage()
);
}
}
目前接口除了初始化客户端和开启日志功能接口外,其他的接口都返回Promise对象,开发者可以使用async await的语法,也可使用原生的
promise().then(/**/).catch(/**/)
,接口的使用基本一样,以上传接口为例进行说明
import AliyunOSS from 'aliyun-oss-react-native'
AliyunOSS.enableDevMode();
step-3:初始化配置选项(可选)
const configuration = {
maxRetryCount: 3,
timeoutIntervalForRequest: 30,
timeoutIntervalForResource: 24 * 60 * 60
};
step-4:初始化OSS Client,目前提供了4中初始化OSS Client方式,这里调用initWithServerSTS,其他的几个接口可参考该文档中的API
const endpoint = "xxxx.aliyuncs.com"
AliyunOSS.initWithServerSTS("/***http://ip:端口/****/",endPoint, configuration)
备注:仓库文件中提供Node脚步启用本地鉴权服务,打开script文件夹运行,运行以下命令:
npm istall
<!-- 备注:目前接口仅暴漏filePath,上传路径为file:/// -->
AliyunOSS.asyncUpload(bucketname, objectkey, filePath).then( (res) => {
<!-- log的查看可以通过React Native自带的调试工具也可通过XCode Log控制台进行查看 -->
console.log(res)
}).catch((error)=>{
console.log(error)
})
<!-- 监听上传事件和上传进度-->
const downloadProgress = p => console.log(p.currentSize / p.totalSize);
AliyunOSS.addEventListener('uploadProgress', downloadProgress);
主要介绍目前React Native SDK已经实现并部分支持的API,主要涉及到日志管理、Bucket管理、Object管理、授权、文件上传和下载等。后续持续完善相关API和BUG修复。API列表如下
API | Android | iOS |
---|---|---|
enableDevMode | 支持 | 支持 |
initWithPlainTextAccessKey | 支持 | 支持 |
initWithSigner | 支持 | 支持 |
initWithSecurityToken | 支持 | 支持 |
initWithServerSTS | 支持 | 支持 |
asyncUpload | 支持 | 支持 |
asyncAppendObject | ||
asyncResumableUpload | ||
initMultipartUpload | 支持 | 支持 |
multipartUpload | 支持 | 支持 |
listParts | 支持 | 支持 |
abortMultipartUpload | 支持 | 支持 |
asyncDownload | 支持 | 支持 |
asyncCreateBucket | 支持 | 支持 |
asyncGetBucketACL | 支持 | 支持 |
asyncListBuckets | 支持 | 支持 |
asyncDeleteBucket | 支持 | 支持 |
asyncHeadObject | 支持 | 支持 |
asyncListObjects | 支持 | 支持 |
doesObjectExist | 支持 | 支持 |
asyncCopyObject | 支持 | 支持 |
asyncDeleteObject | 支持 | 支持 |
该接口主要是开启日志记录功能,具体使用参考:
AliyunOSS.enableDevMode()
该接口需要通过明文授权acckeyId和accekeySecret,使用可查看
const endPoint = "XXX"
const configuration = {
maxRetryCount: 3,
timeoutIntervalForRequest: 30,
timeoutIntervalForResource: 24 * 60 * 60
};
AliyunOSS.initWithPlainTextAccessKey(accessKey, secretKey, endPoint, configuration);
该接口通过自签方式授权,请参考自签名模式,使用可查看
AliyunOSS.initWithSigner(signature, accessKey, endPoint, configuration);
该接口通过SecurityToken授权,参考STS访问控制,使用可查看
AliyunOSS.initWithSecurityToken(signature, accessKey, endPoint, configuration);
该接口通过本地鉴权服务器授权,使用可查看
AliyunOSS.initWithSecurityToken(signature, accessKey, endPoint, configuration);
AliyunOSS.asyncUpload(bucketname, objectKey, filepath).then().catch()
AliyunOSS.initMultipartUpload(bucketname,objectkey).then((e)=>{
console.log(e)
//e 为uploadId
}).catch((error) => {
console.log(error)
})
//uploadId为initMultipartUpload成功回调后的返回值
AliyunOSS.multipartUpload(multipartBucket,mulitipartObjectKey,uploadId,filepath).then((res)=>{
Alert.alert("分片上传成功");
}).catch((e) => {
Alert.alert("分片上传失败");
})
AliyunOSS.listParts(multipartBucket,multipartObjectKey,upoadId).then((e)=>{
Alert.alert("onListParts"+e)
}).catch((e)=>{
Alert.alert("onListPartsError")
})
AliyunOSS.abortMultipartUpload(multipartBucket,multipartBucket,uploadId).then((e)=>{
Alert.alert("分片终止成功");
}).catch((e)=>{
Alert.alert("分片终止失败");
})
// xxx为图片处理选项,具体可查看官网
AliyunOSS.asyncDownload(bucketname,objectkey,{"x-oss-process":'xxxx'}).then((e) => {
console.log(e)
}).catch((e)=>{
console.log(e)
})
AliyunOSS.asyncCreateBucket('tyluoluo','private','oss-cn-zhangjiakou').then((e) => {
console.log(e)
}).catch((e)=>{
console.log(e)
})
AliyunOSS.asyncGetBucketACL('luozhang002').then((e) => {
console.log(e)
}).catch((e)=>{
console.log(e)
})
AliyunOSS.asyncListBuckets().then((e) => {
console.log(e)
}).catch((e) => {
console.log(e)
})
AliyunOSS.asyncDeleteBucket("tyluoluo").then((e) => {
console.log(e)
}).catch((e) => {
console.log(e)
})
AliyunOSS.asyncHeadObject('luozhang002','yanxing').then((e)=>{
console.log(e)
}).catch((e)=> {
console.log(e)
})
AliyunOSS.asyncListObjects('luozhang002').then((e)=>{
console.log(e)
}).catch((e)=>{
console.log(e)
})
AliyunOSS.doesObjectExist('luozhang001','xx.png').then((e)=>{
console.log(e)
}).catch((e)=>{
console.log(e)
})
AliyunOSS.asyncCopyObject('luozhang001',"2.png","luozhang002","sbsbsb").then((e)=>{
console.log(e)
}).catch((e)=>{
console.log("xxxx")
console.log(e)
})
AliyunOSS.asyncDeleteObject('luozhang001','2.png').then((e)=>{
Alert.alert(e)
}).catch((e)=>{
console.log(e)
})
仓库Example中提供了React Native android和iOS端运行demo,Android为Example下的android工程,iOS为Example下的NativeAddRN工程,目前Example提供了所有已开发的API DEMO,还在完善中,欢迎参与共建。如何运行Example呢?
1. git clone https://github.com/aliyun/aliyun-oss-react-native.git
2. cd Example
3. npm install
1. cd script/sts-app-server-node
2. node index.js
目前React Native SDK处于起步阶段,开发者使用React Native API的过程中,遇到任何问题都可以向官方仓库提Issue或者PR,我们会第一时间进行处理。欢迎广大开发者参与共建,修复和完善更多的API 来更好的服务使用阿里云存储服务的客户和开发者。具体开发可参考如下文档