本文为上一篇《bmob Harmony鸿蒙SDK开发图文列表和回复功能》的续篇。
上一篇中,我们讲到了如何在鸿蒙APP中呈现图文列表和评论功能,本文将介绍如何在鸿蒙APP中发布图文。本文的最终展示效果如下:
一、构建发布页面的布局
新建一个名为 Publish
的页面,页面布局还是一如既往的采用Navigation
组件进行整体的布局,这个组件可以给我们用来做页面的整体布局。代码如下:
build() {
Navigation(){
TextArea({placeholder:'请输入你要发布的内容',text:this.content}).width('100%')
.height('40%')
.margin({ top:10 })
.padding(10)
.borderRadius(15)
.onChange((txt)=>{
this.content = txt
})
Row(){
Image(this.url)
.objectFit(ImageFit.Contain)
.width(60)
.aspectRatio(1)
.onClick(()=>{
this.selectFile()
})
}
.width('100%')
.height(80)
Button('发布')
.width('100%')
.height(40)
.margin({top:10})
.onClick(()=>{
this.save()
})
}
.title('发布内容')
.titleMode(NavigationTitleMode.Mini)
.margin(10)
}
二、完成选择图片的功能
当我们点击图片的功能时,需要先打开手机中的照片列表,选中我们要上传的图片之后,图片先呈现在Image
组件中。
这里我们用到了PhotoViewPicker组件,代码如下:
selectFile(){
try {
let PhotoSelectOptions = new picker.PhotoSelectOptions();
PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
PhotoSelectOptions.maxSelectNumber = 1;
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select(PhotoSelectOptions, (err, PhotoSelectResult) => {
if (err) {
Prompt.showToast({message:'选择图片的时候发生错误:'+err})
return;
}
this.url = PhotoSelectResult['photoUris'][0]
});
} catch (err) {
Prompt.showToast({message:'选择图片的时候发生错误:'+err})
}
}
三、上传图片和发布内容
当我们点击发布按钮的时候,首先要上传图片,如果图片上传成功,我们将获取到图片上传后的地址,然后再把发布的内容和图片等信息一起插入到数据表中。
1、上传图片
上传图片非常简单,只需要调用Bmob.uploadImg
方法,就可以快速把图片上传到Bmob的文件CDN里面去。代码如下:
Bmob.uploadImg(this.url).then((res)=>{
//上传成功之后,res.url可以获取到图片的网络地址
})
.catch((err)=>{
Prompt.showToast({message:'上传文件错误:'+ err.error})
})
这里需要注意的是:如果上传不了图片,请检查是否接入了自己备案过的文件二级域名(下图1)或者直接购买文件二级域名(下图2)。
图1
图2
2、发布内容
获取到图片的网络地址之后,我们就可以将内容发布到videos
表中了。
由于发布的时候需要发布者的头像和昵称信息,我们首先要获取登录用户的这些信息,代码如下:
aboutToAppear(){
Bmob.User().current().then((res) => {
this.username = res.realname
this.avator = res.avator
})
}
发布内容的代码如下:
let query = Bmob.Query('videos')
query.set('content',this.content)
query.set('url',res.url)
query.set('avator',this.avator)
query.set('name',this.username)
query.save().then((res)=>{
router.pushUrl({url:'pages/Index'})
})
.catch((err)=>{
Prompt.showToast({message:'发布失败:'+ err.error})
})
})
发布成功之后,我们通过router.pushUrl
方法跳到首页中。
四、更多源码
本文涉及到的源码请直接查看:gitee.com/zhang-ming-…