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路径和其他路径相互转化的方法。
楼主你好,目前不支持呢
更多关于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路径的图片,可以通过以下步骤实现:
- 
获取文件路径:首先,确保你能够通过 datashare:///media/image/21路径访问到图片文件。可以使用@ohos.file.fs模块的open和read方法来读取文件内容。
- 
创建FormData对象:使用 @ohos.request模块的FormData类创建一个表单数据对象,用于封装要上传的文件。
- 
添加文件到FormData:将读取到的文件内容添加到 FormData对象中,通常使用append方法,并指定文件字段名和文件数据。
- 
发送请求:使用 @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模块读取该路径的文件内容,然后将其转换为ArrayBuffer或Blob格式。接着,使用@ohos.request的upload方法,将文件数据作为body参数传递。具体步骤如下:
- 使用fs.openSync打开文件。
- 使用fs.readSync读取文件内容。
- 将读取的数据转换为ArrayBuffer或Blob。
- 使用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);
 
        
       
                   
                   
                  

