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);