<image v-else :src="currentUrl" draggable @click="takeFn">
currentUrl为绝对路径
//点击元素拍照
takeFn(){
uni.chooseImage({
count: 1,
sizeType: "compressed",
sourceType: ["camera", "album"],
success: async (res) => {
const tempFilePaths = res.tempFilePaths[0];
const fileUrl = await this.copyImageToAttachment(tempFilePaths);
this.currentUrl=fileUrl
},
});
},
// 获取本地存储附件文件夹 DirectoryEntry对象
getDirectoryEntry() {
return new Promise((resolve, reject) => {
// 获取本地文件系统对象
plus.io.requestFileSystem(
plus.io.PUBLIC_DOCUMENTS,
(fileSystem) => {
// 创建或打开当前目录指定的目录, 目的是获取附件目录
fileSystem.root.getDirectory(
"scorePhoto",
{ create: true }, // 不存在则创建
(attachmentEntry) => {
// 返回附件目录对象
resolve(attachmentEntry);
},
(error) => {
console.log("打开或创建附件目录失败");
reject(error);
}
);
},
(error) => {
console.log("获取文件系统对象失败");
reject(error);
}
);
});
},
// 复制图片至附件目录, 返回复制成功图片的绝对路径
async copyImageToAttachment(path) {
const attachment = await this.getDirectoryEntry();
return new Promise((resolve, reject) => {
// 通过URL参数获取目录对象或文件对象, 获取拍照/相册临时图片
plus.io.resolveLocalFileSystemURL(
path,
(fileEntry) => {
fileEntry.copyTo(
attachment,
this.setCopyImageName(fileEntry.name),
(newFileEntry) => {
resolve(newFileEntry.fullPath);
},
(error) => {
console.log("复制图片失败");
reject(error);
}
);
},
(error) => {
console.log("获取拍照临时图片失败");
reject(error);
}
);
});
},
// 设置复制的图片名称
setCopyImageName(fileName) {
const ext = this._getFileExt(fileName);
const time = new Date().getTime();
const RandomNum = Math.floor(Math.random() * 100000);
return `${time}_${RandomNum}${ext}`;
},
// 获取文件名后缀
_getFileExt(fileName) {
if (!fileName) {
throw new Error("文件名不存在");
}
const index = fileName.lastIndexOf(".");
return index <= -1 ? "" : fileName.substring(index);
},
// 删除本地图片
delImageByUrl(url) {
plus.io.resolveLocalFileSystemURL(
url,
(fileEntry) => {
fileEntry.remove(
() => {
uni.$toast.success('删除图片成功')
},
() => {
uni.$toast.error('删除图片失败')
console.log("删除图片失败", error);
}
);
},
(error) => {
console.log("删除图片-获取图片失败", error);
}
);
},