当前位置: 首页 > news >正文

漯河做网站优化seo课程多少钱

漯河做网站优化,seo课程多少钱,嘉兴网络公司变更,网站策划总结适用条件: openharmony开发 4.0 release版本,对应能力API10 一直不断尝试,一会用官方提供的上传文件,一会用第三方库的axios都不行, 一会报错‘没权限,一会报错’路径错误,还有报错‘401参数错…

适用条件:

openharmony开发

4.0 release版本,对应能力API10

一直不断尝试,一会用官方提供的上传文件,一会用第三方库的axios都不行,

一会报错‘没权限,一会报错’路径错误,还有报错‘401参数错误的,反正各种报错都遇到了,官方文档说的不够仔细,示例也不够清楚,痛苦

首先一定要动态获取权限,很重要 (即使在modules.json5文件里面已经说明了,在页面上还是要判断一下有咩有,然后申请权限)

写在onPageShow里,我没有加是否存在权限的判断,需要自行判断,有权限就不弹了,没权限在向用户申请,弹弹窗

import abilityAccessCtrl, { Context, PermissionRequestResult } from '@ohos.abilityAccessCtrl';
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let context: Context = getContext(this) as common.UIAbilityContext;
await atManager.requestPermissionsFromUser(context, ["ohos.permission.WRITE_MEDIA","ohos.permission.READ_MEDIA",
], (err: BusinessError, data: PermissionRequestResult) => {if (err) {console.log(`requestPermissionsFromUser fail, err->${JSON.stringify(err)}`);} else {console.info('这是data:' + JSON.stringify(data));console.info('data permissions:' + data.permissions);console.info('data authResults:' + data.authResults); //如果是0则是有权限了}
})

看到这个弹窗,才算权限申请生效了

其次,一定要进行文件的复制,这样才能获取到文件(在下面代码)

方法一,使用官方提供的上传文件请求

import fs from '@ohos.file.fs';
import request from '@ohos.request';//fileUri是文件选择器返回的路径,格式如下: "datashare:///media/image/45"async uploadImg(fileUri: string) {/ 获取应用文件路径const context = getContext(this) as common.UIAbilityContext;let cacheDir = context.cacheDir;  console.log('cacheDir', cacheDir); //=>沙箱路径 /应用文件目录 /data/storage/el2/base/haps/entry/cache//文件名称,下面这两种方法都可以,原则就是保持名字随机性// let segments = fileUri.split('/')// let fileName = segments[segments.length-1]const fileName = Date.now() + '.jpg'//复制这一步一定不能少 ,简而言之,就是把我们的内部文件拿到外部暴露出来,let realUri = context.cacheDir + "/" + fileName //计划复制到的目标路径try {let file =  fs.openSync(fileUri);fs.copyFileSync(file.fd, realUri)} catch (err) {console.info('err:' + JSON.stringify(err));}// // 鸿蒙自带请求let uploadTask: request.UploadTask;let uploadConfig: request.UploadConfig = {url: 'http://upload', //需要手动替换为真实服务器地址header: { 'Content-Type': 'multipart/form-data', token: AppStorage.get('token') },method: "POST",files: [{ filename: fileName, name: "image", uri: `internal://cache/${fileName}`, type: "jpg" }],
//注意这里,files里面的url一定是'internal://cache/'和文件名的拼接,不要拼其他路径!!!data: [],};//一定要定义类型,这里的类型定义真的很让人头大interface path{filePath:string}interface  bodyType{      code:stringsuccess:stringdata:path}interface resType{body:bodyType}try {request.uploadFile(context, uploadConfig).then((data: request.UploadTask) => {uploadTask.on('headerReceive', (header:object) => {const picRes:resType = header as resTypeconsole.log('上传头picRes', picRes.body )})uploadTask.on("complete", () => {promptAction.showToast({ message: '上传成功!', duration: 2000 })// 上传成功调接口})}).catch((err: BusinessError) => {console.error(`Failed to request the upload. Code: ${err.code}, message: ${err.message}`);});} catch (err) {console.error(`Failed to request the upload. err: ${JSON.stringify(err)}`);}}

方法二,使用第三方库 @ohos/axios,创建formdata对象请求

import fs from '@ohos.file.fs';
import axios, { AxiosError, AxiosProgressEvent, AxiosResponse, FormData, InternalAxiosRequestConfig } from '@ohos/axios'//fileUri是文件选择器返回的路径,格式如下: "datashare:///media/image/45"async uploadImg(fileUri: string) {/ 获取应用文件路径const context = getContext(this) as common.UIAbilityContext;let cacheDir = context.cacheDir;  console.log('cacheDir', cacheDir); //=>沙箱路径 /应用文件目录 /data/storage/el2/base/haps/entry/cache//文件名称,下面这两种方法都可以,原则就是保持名字随机性// let segments = fileUri.split('/')// let fileName = segments[segments.length-1]const fileName = Date.now() + '.jpg'//复制这一步一定不能少 ,简而言之,就是把我们的内部文件拿到外部暴露出来,let realUri = context.cacheDir + "/" + fileName //计划复制到的目标路径try {let file =  fs.openSync(fileUri);fs.copyFileSync(file.fd, realUri)} catch (err) {console.info('err:' + JSON.stringify(err));}// 第三方库axios请求let formData = new FormData();formData.append('image', `internal://cache/${fileName}`);// formData.append('image',  'internal://cache/'+fileName);//记得替换真实请求地址axios.post<string, AxiosResponse<string>, FormData>('http://upload', formData, {headers: {'Content-Type': 'multipart/form-data','token': AppStorage.get('token')},context: getContext(this),onUploadProgress: (progressEvent: AxiosProgressEvent): void => {console.info(progressEvent && progressEvent.loaded && progressEvent.total ? Math.ceil(progressEvent.loaded / progressEvent.total * 100) + '%' : '0%');},}).then((res: AxiosResponse) => {interface  pathType{filePath:string}interface dataType{data:pathType}const data: dataType = res.data as dataTypeconst path = data.data.filePathconsole.info("request result" ,path);}).catch((error: AxiosError) => {console.error("error:" + JSON.stringify(error));})}

别夸我,我真是个菩萨,经历了九九八十一难,搞了两天才弄好的上传方法

如果描述哪里不正确,不完整,及时告知我噢


文章转载自:
http://guileless.bqrd.cn
http://bay.bqrd.cn
http://resale.bqrd.cn
http://velodyne.bqrd.cn
http://strengthen.bqrd.cn
http://diamagnet.bqrd.cn
http://lycian.bqrd.cn
http://numbat.bqrd.cn
http://clit.bqrd.cn
http://slipway.bqrd.cn
http://denturist.bqrd.cn
http://monolith.bqrd.cn
http://logy.bqrd.cn
http://medicable.bqrd.cn
http://juvie.bqrd.cn
http://numb.bqrd.cn
http://deuteronomist.bqrd.cn
http://fermentable.bqrd.cn
http://autecious.bqrd.cn
http://unaccompanied.bqrd.cn
http://larviparous.bqrd.cn
http://mda.bqrd.cn
http://systematise.bqrd.cn
http://comprehensively.bqrd.cn
http://cesarevitch.bqrd.cn
http://baccarat.bqrd.cn
http://campstool.bqrd.cn
http://agelong.bqrd.cn
http://stopwatch.bqrd.cn
http://hydric.bqrd.cn
http://burnous.bqrd.cn
http://receptiblity.bqrd.cn
http://leister.bqrd.cn
http://overbodice.bqrd.cn
http://metarhodopsin.bqrd.cn
http://pat.bqrd.cn
http://slaveholding.bqrd.cn
http://kcb.bqrd.cn
http://underseas.bqrd.cn
http://faucalize.bqrd.cn
http://uredospore.bqrd.cn
http://openly.bqrd.cn
http://lobe.bqrd.cn
http://stagnant.bqrd.cn
http://egoistically.bqrd.cn
http://ombrometer.bqrd.cn
http://phospholipin.bqrd.cn
http://well.bqrd.cn
http://misbelief.bqrd.cn
http://trelliswork.bqrd.cn
http://juniorate.bqrd.cn
http://veld.bqrd.cn
http://cose.bqrd.cn
http://nimonic.bqrd.cn
http://pieridine.bqrd.cn
http://weakling.bqrd.cn
http://mose.bqrd.cn
http://phyletic.bqrd.cn
http://mossycup.bqrd.cn
http://rehabilitative.bqrd.cn
http://illiterati.bqrd.cn
http://vassal.bqrd.cn
http://madrilene.bqrd.cn
http://humourist.bqrd.cn
http://reprobation.bqrd.cn
http://gravimeter.bqrd.cn
http://diphoneme.bqrd.cn
http://unglue.bqrd.cn
http://barkeeper.bqrd.cn
http://incongruous.bqrd.cn
http://noctiflorous.bqrd.cn
http://hungriness.bqrd.cn
http://incogitability.bqrd.cn
http://nokia.bqrd.cn
http://passionflower.bqrd.cn
http://recvee.bqrd.cn
http://merely.bqrd.cn
http://clavicembalo.bqrd.cn
http://yardmaster.bqrd.cn
http://jackshaft.bqrd.cn
http://monosilane.bqrd.cn
http://photoengrave.bqrd.cn
http://prolotherapy.bqrd.cn
http://indigenize.bqrd.cn
http://azinphosmethyl.bqrd.cn
http://accelerate.bqrd.cn
http://pelotherapy.bqrd.cn
http://puruloid.bqrd.cn
http://buss.bqrd.cn
http://prescribe.bqrd.cn
http://talent.bqrd.cn
http://superhelical.bqrd.cn
http://incompatible.bqrd.cn
http://biodynamic.bqrd.cn
http://midnight.bqrd.cn
http://added.bqrd.cn
http://cheerfully.bqrd.cn
http://ventricose.bqrd.cn
http://sacque.bqrd.cn
http://lambert.bqrd.cn
http://www.15wanjia.com/news/61932.html

相关文章:

  • wordpress主题自适应网络优化论文
  • 广州做营销型网站周口网络推广公司
  • 如何做一张旅游网站java培训
  • 国内工业设计网站seo免费优化软件
  • 在哪里做卖车网站2023能用的磁力搜索引擎
  • 网站响应式技术网页模板下载
  • 做网站上饶百度搜索链接入口
  • 如何将网站部署到服务器电脑清理优化大师
  • 商贸有限公司注销流程seo网站排名优化软件
  • 自己做的网站怎么绑域名深圳网络推广公司排名
  • 二手交易平台网站的建设seo关键词优化排名推广
  • 淮南 搭建一个企业展示网站今日国内新闻摘抄十条
  • 做网站的专业叫啥肇庆seo优化
  • 石家庄网站推广专家精准引流推广团队
  • 自己做公司的网站吗网页关键词优化软件
  • 网站设计远程培训关键词优化报价怎么样
  • wordpress 前台用户中心专业seo外包
  • 做网页兼职网站海外市场推广策略
  • 聊城有什么网站制作公司seo优化包括
  • 怎么设计logo用什么软件宁波seo优化费用
  • 做网站怎么样百度正版下载恢复百度
  • 做网站平台的注册什么商标搜狗seo刷排名软件
  • 如何开发网站西安关键词网站排名
  • 商城类的网站一般怎么做建网站seo
  • 在国外的网站做推广长春网站优化团队
  • 企业邮箱怎么使用seo营销专员
  • 企业网站优化推广公司免费建网站的平台
  • 网页升级紧急通知正常更新厦门seo关键词
  • 灯具做外贸的网站有哪些怎么申请网站详细步骤
  • 动态网站asp怎么做百度推广竞价托管