上传图库图片到服务器就这么简单

前言

在学习上传图库图片到服务器前,先学习一下这篇帖子ArkTS(3.0与3.1)前端和SpringBoot后端文件上传示例(Request.upload)怎么上传文件到服务器的,然后看一下如何从图库选择图片文档选择用户文件有了这方面知识后,实现上传图库图片到服务器就是这么简单了。如图:

知识点

PhotoViewPicker

图库选择器对象,用来支撑选择图片/视频和保存图片/视频等用户场景。在使用前,需要先创建PhotoViewPicker实例。

示例:

letphotoPicker =newpicker.PhotoViewPicker();复制

 select

select(option?: PhotoSelectOptions) : Promise<PhotoSelectResult>复制

通过选择模式拉起photoPicker界面,用户可以选择一个或多个图片/视频。接口采用promise异步返回形式,传入可选参数PhotoSelectOptions对象,返回PhotoSelectResult对象。

参数:

参数名类型必填说明

optionPhotoSelectOptions否photoPicker选择选项,若无此参数,则默认选择媒体文件类型为图片和视频类型,选择媒体文件数量的最大值为50。

返回值:

类型说明

Promise<PhotoSelectResult>Promise对象。返回photoPicker选择后的结果集

示例:

asyncfunction example() {try{letPhotoSelectOptions =newpicker.PhotoSelectOptions();    PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;    PhotoSelectOptions.maxSelectNumber =5;letphotoPicker =newpicker.PhotoViewPicker();    photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult) => {      console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: '+JSON.stringify(PhotoSelectResult));    }).catch((err) => {      console.error('PhotoViewPicker.select failed with err: '+ err);    });  }catch(err) {    console.error('PhotoViewPicker failed with err: '+ err);  }}复制

实例源码

import picker from'@ohos.file.picker';import common from'@ohos.app.ability.common';import fs from'@ohos.file.fs';import request from'@ohos.request';// 获取应用文件路径letcontext = getContext(this) as common.UIAbilityContext;letcacheDir = context.cacheDir;// 上传任务配置项letuploadConfig = {  url:'http://192.168.3.48:8740/file/upload',  header: { key1:'Content-Type', key2:'multipart/form-data'},  method:'POST',  files: [    { filename:'test.jpg', name:'test', uri:'internal://cache/test.jpg', type:'jpg'}  ],  data: [    { name:'fileId', value:'FP000008'}  ]}@Entry@Componentstruct Index {  @State message: string =''@State imgSrc: string =''async selectImage() {try{letPhotoSelectOptions =newpicker.PhotoSelectOptions();      PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;      PhotoSelectOptions.maxSelectNumber =1;letphotoPicker =newpicker.PhotoViewPicker();      photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult) => {        console.info('xx PhotoViewPicker.select successfully, PhotoSelectResult uri: '+JSON.stringify(PhotoSelectResult));// 从图库选择图片后,返回图片urileturi = PhotoSelectResult.photoUris[0];        console.info('xx uri:'+ uri)this.imgSrc = uri// 读取上面返回uriletfile = fs.openSync(uri, fs.OpenMode.CREATE);// 复制文件到缓存目录下fs.copyFileSync(file.fd, cacheDir +'/test.jpg')// 上传文件到服务器上this.uploadImage()      }).catch((err) => {        console.error('xx PhotoViewPicker.select failed with err: '+ err);      });    }catch(err) {      console.error('xx PhotoViewPicker failed with err: '+ err);    }  }  uploadImage() {// 将本地应用文件上传至网络服务器try{      request.uploadFile(context, uploadConfig)        .then((uploadTask) => {          uploadTask.on('complete', (taskStates) => {for(leti =0; i < taskStates.length; i++) {              console.info(`xx upload complete taskState: ${JSON.stringify(taskStates[i])}`);this.message =JSON.stringify(taskStates[i])            }          });        })        .catch((err) => {          console.error(`xx Invoke uploadFile failed, code is ${err.code}, message is ${err.message}`);this.message = err.message        })    }catch(err) {      console.error(`xx Invoke uploadFile failed, code is ${err.code}, message is ${err.message}`);this.message = err.message    }  }  build() {    Column({space:30}) {      Button('打开图库')        .width('80%').height('40')        .onClick(() => {this.selectImage()        })      Image(this.imgSrc)        .width('50%').height('50%')      Text(this.message)        .fontSize(20).width('100%')    }    .width('100%').height('100%')    .padding(10)  }}复制

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容