核心技术点:端云一体化开发的云存储模块。请参见官方文档:
图片上传流程:将图片复制到缓存区>>开始上传>>监听上传进度>>上传完成后在AGC云存储默认实例中可见图片。
1.初始化
定义云存储默认实例变量、上传回调函数类型
// 云存储实例
const bucket:cloudStorage.StorageBucket=cloudStorage.bucket(); // 默认云存储实例
// 文件上传完成回调
type UploadCompleteCallback=(uploadSuccess:boolean)=>void;
2.复制图片文件
/**
* 复制文件
* @param from
* @param to
*/
copyFile(from: string, to: string): void {
let fFile = fileIo.openSync(from);
let tFile = fileIo.openSync(to, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); // 替换或创建文件
fileIo.copyFileSync(fFile.fd, tFile.fd);
fileIo.closeSync(fFile);
fileIo.closeSync(tFile);
}
3.添加图片上传监听
/**
* 添加上传监听
* @param task
* @param completeCallback
*/
addEventListener(task:request.agent.Task,completeCallback:UploadCompleteCallback){
task.on('progress',(progress) => {
// 显示进度条
});
task.on('completed',(progress) => {
completeCallback(true);
});
task.on('failed',(progress) => {
completeCallback(false);
});
}
4.获取上传完成后的图片云路径
/**
* 获取云文件路径
* @param path
*/
getImgCloudUrl(path:string):void{
bucket.getDownloadURL(path)
.then(async (downloadUrl:string)=>{
this.cloudImgUrl=downloadUrl;
// 保存记录到云数据库
// TODO:
// /
})
.catch((err:BusinessError)=>{})
}
5.上传图片
/**
* 上传图片
* @param imgUri
*/
uploadImg(imgUri:string):void{
let fileName=imgUri.split('/').pop() as string;
let cacheFilePath=`${getContext().cacheDir}/${fileName}`;
this.copyFile(imgUri,cacheFilePath);
let cloudPath=`NMSS-PEST/image_${new Date().getTime()}.jpg`;
bucket.uploadFile(getContext(this),{localPath:cacheFilePath,cloudPath:cloudPath})
.then((task:request.agent.Task)=>{
// 监听上传进度
this.addEventListener(task,this.onUploadCompleted(cacheFilePath,cloudPath));
task.start();
})
.catch((err:BusinessError)=>{
console.error(err.message);
})
}
/**
* 上传文件
* @param imgUri
* @param cloudPath
* @param completeCallback
*/
onUploadCompleted(cacheFilePath:string,cloudPath:string):UploadCompleteCallback{
return (uploadSuccess:boolean)=>{
if(uploadSuccess){
// 获取云文件路径
this.getImgCloudUrl(cloudPath);
}
fileIo.unlink(cacheFilePath);
}
}
下一篇:图片上传成功完成后,保存病虫害其他信息到云数据库