鸿蒙从相册选择图片上传到服务器

鸿蒙从相册选择图片上传到服务器

01.从相册选择图片

创建图片选择对象并选择图片,new picker.PhotoViewPicker() 它的实例化对象中有一个select方法,里面需要传规定上传文件类型数量的参数,它的返回的是一个promise。

这个参数需要通过 new picker.PhotoSelectOptions() ,实例化对象中有两个值,一个是规定文件类型的,一个是规定文件数量的。

import picker from '@ohos.file.picker';
async pickerAvatar(){
    const optinos = new picker.PhotoSelectOptions()
    //规定为图片类型
    optinos.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE
    //上传文件数量
    optinos.maxSelectNumber = 1
    //通过picker的实例化对象中的select自动获取用户选择的那张图片的地址
    const pickerView = new picker.PhotoViewPicker()
    //optinos 规定用户选择的文件类型和数量
    let urls = await pickerView.select(optinos)
    //判断用户是否选择了图片
    if(urls.photoUris.length<=0){
        return
    }
    //有图片就返回图片地址
    let imgUrl = urls.photoUris[0]
    return imgUrl
}

02.拷贝图片到缓存目录

需要根据原地址获取内存地址是一个数字

01.第一个参数是原地址 第二个参数是规定文件是否是可读可写的

const file = fs.openSync(photoImagePath, fs.OpenMode.READ_ONLY)
let fileFD = file.fd

02.获取需要拷贝到的目标地址

//根据上下文获取文件夹目录
let destPath = getContext().cacheDir
//生成一个文件的名字
let fileName = Date.now().toString()
//生成一个文件的后缀
const ext = 'jpg'
//合成一个完整的路径
let fullPath = destPath + '/' + fileName + '.' + ext

03.把图片拷贝的到缓存目录

fs.copyFileSync(fileFD, fullPath)

完整代码

import fs from '@ohos.file.fs';
async copyImageToCache(photoImgPath:string){
    //根据原地址获取其文件的内存地址,是一个数字
    const file = fs.openSync(photoImgPath,fs.OpenMode.READ_ONLY)
    let fileFD = file.fd
    //获取需要拷贝到的目标地址
    let destPath = getContext().cacheDir
    //随机生成一个文件名
    let fileName = Date.now().toString()
    //固定一个文件的拓展名
    const ext = 'jpg'
    //把他组合成一个完成文件名
    let fullPath = destPath+'/'+fileName+'.'+ext
    fs.copyFileSync(fileFD,fullPath)
    //返回缓存目录的地址
    return [`internal://cache/${fileName + '.' + ext}`,fileName + '.' + ext]
}

03.发送请求上传图片

需要调用 request.uploadFile 里面2个参数,第一个参数getContext(),第二个参数一个对象里面放请求的相关参数 请求类型,请求地址,请求头信息,files和data

files:是一个数组对象 对象里面有四个值 第一个是文件名字,文件类型,name看接口文档给什么就填什么,文件的完整地址

data:是额外要提交的数据不能省略

async uploadAvatar(arr:string[]){

    //调用上传方法
    let uploador = await request.uploadFile(getContext(),{
        method:'POST',
        url:'请求路径',
        header:{
            '请求头相关参数'
        },
        files:[{filename:arr[1],type:'jpg',name:'file',uri:arr[0]}],
        data:[]
    })
    uploador.on('progress',(uploadedSize,totleSize)=>{
        if(uploadedSize === totleSize){
            AlertDialog.show({message:'上传完成'})
        }
    })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>