图片选择就不用说了,直接用
无须申请权限 。
上传图片,步骤和android对比稍微有点复杂,可能是为了安全性考虑,需要将图片先拷贝到缓存目录下面,然后再上传,当然你也可以转成Base64,然后和服务端沟通。
这里是拷贝到缓存目录中
拷贝函数是:
public static async copyFileToCache(cacheDir: string, uri: string): Promise<string> { let id = uri.split('/').pop()?.split('.')[0]; let imagePath = `${cacheDir}/${id}.jpg`; let file = await fileIo.open(uri, fs.OpenMode.READ_ONLY); try { fileIo.copyFileSync(file.fd, imagePath); } catch (err) { logger.info(`copyFileToCache copyFileSync err = ${err}`); } await fileIo.close(file.fd); return imagePath; }
如果是列表,你也可以循环操作
上传是用的axios:
axios.post<HdResponse<UserPhotoBean>, AxiosResponse<HdResponse<UserPhotoBean>>, FormData>(BasicConstant.REQUES_URL + AppApi.UPLOAD_PHOTO, formData, { headers: { 'Content-Type': 'multipart/form-data' }, context: context, onUploadProgress: (progressEvent: AxiosProgressEvent): void => { console.info(progressEvent && progressEvent.loaded && progressEvent.total ? Math.ceil(progressEvent.loaded / progressEvent.total * 100) + '%' : '0%'); }, } ).then((res: AxiosResponse<HdResponse<UserPhotoBean>>) => { console.info("result" + JSON.stringify(res.data)); resolve(res.data) }).catch((err: AxiosError) => { reject() console.error("error:" + JSON.stringify(err)); })
至此,所有操作就完成了