HarmonyOS鸿蒙Next中@ohos.request接口怎么上传datashare:///media/image/21路径的图片呢

HarmonyOS鸿蒙Next中@ohos.request接口怎么上传datashare:///media/image/21路径的图片呢 现在要进行图片上传,通过拉起相册应用,我获取到的图片格式为datashare:///media/image/21,但是@ohos.request上传接口只支持dataability或者internal格式的路径。

也没有找到datashare路径和其他路径相互转化的方法。

7 回复

楼主你好,目前不支持呢

更多关于HarmonyOS鸿蒙Next中@ohos.request接口怎么上传datashare:///media/image/21路径的图片呢的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


啊,找了好久,原来不支持,

可以先创建成 `ImageSource` 然后再转成 `Buffer`,接着转换成base64位的,就可以上传了

```javascript
getPhoto() {
    try {
        let PhotoSelectOptions = new picker.PhotoSelectOptions();
        PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
        PhotoSelectOptions.maxSelectNumber = 1;
        let photoPicker = new picker.PhotoViewPicker();
        photoPicker.select(PhotoSelectOptions).then(async (PhotoSelectResult) => {
            const uri = PhotoSelectResult.photoUris[0]
            let file = fs.openSync(uri, fs.OpenMode.READ_ONLY)
            const imageSource = image.createImageSource(file.fd);
            fs.closeSync(file)
            const imagePackApi = image.createImagePacker()
            let packOpts: image.PackingOption = { format: "image/jpeg", quality: 100 }
            imagePackApi.packing(imageSource, packOpts)
              .then(readBuffer => {
                let bufferArr = new Uint8Array(readBuffer);
                let help = new util.Base64Helper()
                var base64 = help.encodeToStringSync(bufferArr)
              }).catch(err => {
              console.error('PhotoViewPicker.select failed with err: ' + err);
            })
          }).catch(err => {
            console.error('PhotoViewPicker.select failed with err: ' + err);
          });
    } catch (err) {
        console.error('PhotoViewPicker failed with err: ' + err);
    }
}

赶紧搞出来啊,API9的工程就等他上架呢😄

有同样的需求啊,期待早日完善相关功能啊

在HarmonyOS鸿蒙Next中,使用@ohos.request接口上传datashare:///media/image/21路径的图片,可以通过以下步骤实现:

  1. 获取文件路径:首先,确保你能够通过datashare:///media/image/21路径访问到图片文件。可以使用@ohos.file.fs模块的openread方法来读取文件内容。

  2. 创建FormData对象:使用@ohos.request模块的FormData类创建一个表单数据对象,用于封装要上传的文件。

  3. 添加文件到FormData:将读取到的文件内容添加到FormData对象中,通常使用append方法,并指定文件字段名和文件数据。

  4. 发送请求:使用@ohos.request模块的upload方法发送HTTP请求,将FormData对象作为请求体上传到服务器。

示例代码如下:

import request from '@ohos.request';
import fs from '@ohos.file.fs';

async function uploadImage() {
    const filePath = 'datashare:///media/image/21';
    const file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
    const fileContent = fs.readSync(file.fd);

    const formData = new request.FormData();
    formData.append('file', fileContent, 'image.jpg');

    const options = {
        url: 'https://your-server.com/upload',
        method: 'POST',
        data: formData,
        headers: {
            'Content-Type': 'multipart/form-data'
        }
    };

    try {
        const response = await request.upload(options);
        console.log('Upload successful:', response.data);
    } catch (error) {
        console.error('Upload failed:', error);
    } finally {
        fs.closeSync(file.fd);
    }
}

uploadImage();

在HarmonyOS鸿蒙Next中,使用@ohos.request接口上传datashare:///media/image/21路径的图片,首先需要通过@ohos.file.fs模块读取该路径的文件内容,然后将其转换为ArrayBufferBlob格式。接着,使用@ohos.requestupload方法,将文件数据作为body参数传递。具体步骤如下:

  1. 使用fs.openSync打开文件。
  2. 使用fs.readSync读取文件内容。
  3. 将读取的数据转换为ArrayBufferBlob
  4. 使用request.upload方法上传数据,设置body为转换后的文件数据。

示例代码:

import fs from '@ohos.file.fs';
import request from '@ohos.request';

let filePath = 'datashare:///media/image/21';
let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
let buffer = new ArrayBuffer(1024);
fs.readSync(file.fd, buffer);
request.upload({
  url: 'your_upload_url',
  body: buffer
});
fs.closeSync(file);
回到顶部