圖片選擇就不用說了,直接用
無須申請權限 。
上傳圖片,步驟和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)); })
至此,所有操作就完成了