HarmonyOS图片上传相关问题

调用相机拍照和相册选择的图片怎么上传到服务器,发现 uri 不能直接使用,官方文档也只提供了 cache 目录的文件上传,是需要权限还是要怎么操作呢?

HarmonyOS
2024-09-06 10:51:41
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

PhotoViewPicker中拿到uri后需要将换片缓存在cache中读取上传, 可参照以下代码实现。

import request from '@ohos.request'; 
import picker from '@ohos.file.picker'; 
import fs, { ReadOptions } from '@ohos.file.fs'; 
import common from '@ohos.app.ability.common'; 
 
// 获取应用文件路径 
let context = getContext(this) as common.UIAbilityContext; 
let cacheDir = context.cacheDir; 
@Entry 
struct page { 
  private openPhotoPicker() { 
    let photoPicker = new picker.PhotoViewPicker(); 
    photoPicker.select({ 
      MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE, 
      maxSelectNumber: 1 
    }, (error, result) => { 
      if (result) { 
        result.photoUris.forEach((uri) => { 
 
          let file = fs.openSync(uri, fs.OpenMode.CREATE); 
          // 复制文件到缓存目录下 
          fs.copyFileSync(file.fd, cacheDir + '/test.jpeg') 
 
          this.uploadImage(['internal://cache/test.jpeg']); 
        }) 
      } 
    }); 
  } 
  private uploadImage(paths: string[]) { 
    let allFiles = Array<request.File>() 
    let header = new Map<Object, string>(); 
    header.set('key1', 'value1'); 
    header.set('key2', 'value2'); 
    for (let i = 0; i <paths.length; i++) { 
      let path = paths; 
      allFiles[i] = { 
        name: "image" + i + ".jpeg", 
        filename: "image" + i + ".jpeg", 
        uri: paths[i], 
        type: "image" 
      } 
    } 
    let data: Array<request.RequestData> = [{ name: 'name', value: 'value' }]; 
    let uploadConfig: request.UploadConfig = { 
      url: "http://XXX", 
      header: header, 
      method: 'POST', 
      files: allFiles, 
      data: data 
    } 
    try { 
      request.uploadFile(getContext(this), uploadConfig, (error, response) => { 
        if(response) { 
          response.on('progress', (uploadedSize: number, totalSize: number) => { 
            console.log("progress, uploadedSize: " + uploadedSize + ", totalSize: " + totalSize) 
          }) 
        } else { 
          console.log("upload failure: " + error) 
        } 
      }); 
    } catch (error) { 
      console.log("upload failure: " + error) 
    } 
  } 
  build() { 
  } 
}
分享
微博
QQ
微信
回复
2024-09-06 16:38:43
相关问题
HarmonyOS 图片风控相关问题
226浏览 • 1回复 待解决
HarmonyOS 上传文件相关Demo
388浏览 • 1回复 待解决
HarmonyOS图片选择器相关问题
380浏览 • 1回复 待解决
ImageKnife 图片相关问题
947浏览 • 1回复 待解决
HarmonyOS上传文件问题
368浏览 • 1回复 待解决
HarmonyOS web上传文件和图片
152浏览 • 1回复 待解决
HarmonyOS如何实现图片上传
343浏览 • 1回复 待解决
HarmonyOS头像上传问题
334浏览 • 1回复 待解决
HarmonyOS Web 图片上传功能失效
120浏览 • 1回复 待解决
HarmonyOS日志文件上传问题
448浏览 • 1回复 待解决
怎么实现后台上传图片
2285浏览 • 1回复 待解决
HarmonyOS如何上传图片到模拟器相册
741浏览 • 1回复 待解决
HarmonyOS 文件上传 & 资源读取问题
366浏览 • 1回复 待解决
HarmonyOS音频相关问题
402浏览 • 1回复 待解决
HarmonyOS RN相关问题
376浏览 • 1回复 待解决
HarmonyOS CardRecognition相关问题
74浏览 • 1回复 待解决
HarmonyOS protobuf相关问题
342浏览 • 1回复 待解决
HarmonyOS 地图相关问题
509浏览 • 1回复 待解决
HarmonyOS 证书相关问题
288浏览 • 1回复 待解决
HarmonyOS AccountKit相关问题
354浏览 • 1回复 待解决
HarmonyOS Grid相关问题
300浏览 • 1回复 待解决
HarmonyOS BindSheet相关问题
289浏览 • 1回复 待解决
HarmonyOS 线程相关问题
330浏览 • 1回复 待解决
HarmonyOS KVStore 相关问题
114浏览 • 1回复 待解决