import { PhotoViewPicker } from 'ohos.picker';
import { request } from 'ohos.net';
// 引导用户选择一张图片,并返回该图片的内存地址(URI)
const pickerAvatar = async () => {
const options = new PhotoSelectOptions();
options.MIMEType = PhotoViewMIMETypes.IMAGE_TYPE; // 指定只能选择图片类型
options.maxSelectNumber = 1; // 用户只能选择一张图片
const pickerView = new PhotoViewPicker();
const urls = await pickerView.select(options);
if (urls.photoUris.length <= 0) {
return;
}
const imgUrl = urls.photoUris[0];
return imgUrl;
};
// 将图片拷贝到应用的缓存目录
const copyImageToCache = async (imgUrl) => {
const file = fs.openSync(photoImgPath, fs.OpenMode.READ_ONLY); // 打开文件为只读模式
let fileFD = file.fd;
const destPath = getContext().cacheDir; // 获取缓存目录路径
const fileName = Date.now().toString() + '.jpg'; // 生成新的文件名
const fullPath = destPath + '/' + fileName;
fs.copyFileSync(fileFD, fullPath); // 拷贝文件
return (`internal://cache/${fileName}`, fileName);
};
// 上传图片到服务器
const uploadImage = async (uri, fileName) => {
let user = AppStorage.get('user') as ILoginUsersModel;
let token = user?.token;
let uploader = await request.uploadFile(getContext(), {
method: 'POST',
url: 'https://teach.itheima.net/hm/userInfo/avatar',
header: {
'Content-Type': 'multipart/form-data',
'Authorization': `Bearer ${token}`,
},
files: ({
filename: arr(1),
type: 'jpg',
name: 'file',
uri: arr(0),
}),
data: () {},
});
uploader.on('progress', (uploadedSize, totalSize) => {
Logger.info('上传大小' + uploadedSize, '总大小:' + totalSize);
});
};
// 调用示例
const imgUrl = await pickerAvatar();
const result = await copyImageToCache(imgUrl);
const [url, fileName] = result;
uploadImage(url, fileName);
08-07