const app = getApp(); // pages/story/a.ts Component({ /** * 组件的属性列表 */ properties: { chooseAvatar: { type: Boolean, value: false, }, chooseMessage: { type: Boolean, value: false, }, accept: { type: String, value: "image", }, obscure: { type: Boolean, value: false, }, edit: { type: Boolean, value: false, }, }, /** * 组件的初始数据 */ data: { show1: false, fileTypeList: { doc: 5, docx: 5, pdf: 4, xls: 6, xlsx: 6, ppt: 7, }, cacheEditParams: {}, }, /** * 组件的方法列表 */ methods: { GetExtensionFileName(pathfilename) { const reg = /(\\+)/g; const pString = pathfilename.replace(reg, "#"); //用正则表达式来将\或\\替换成# const arr = pString.split("#"); // 以“#”为分隔符,将字符分解为数组 例如 D Program Files bg.png const lastString = arr[arr.length - 1]; //取最后一个字符 const arr2 = lastString.split("."); // 再以"."作为分隔符 return arr2[arr2.length - 1]; //将后缀名返回出来 }, handleAfterRead(e, editEnd = false) { if (this.data.edit && !editEnd) { this.setData({ show1: true, cacheEditParams: e, }); return; } if (this.data.obscure) { wx.editImage({ src: e.detail.file.url || e.detail.file.tempFilePath, success: (res: any) => { this.uploadFile({ ...e.detail.file, tempFilePath: res.tempFilePath, }).then((res) => { this.triggerEvent("file", res as object); }); }, fail: () => { this.uploadFile(e.detail.file).then((res) => { this.triggerEvent("file", res as object); }); }, }); } else { this.uploadFile(e.detail.file).then((res) => { this.triggerEvent("file", res as object); }); } }, handleEditEnd() { this.setData({ show1: false, }); this.handleAfterRead(this.data.cacheEditParams, true); }, handleChooseAvatar(e) { this.uploadFile({ fileType: "image", tempFilePath: e.detail.avatarUrl, size: 0, }).then((res) => { this.triggerEvent("file", res as object); }); }, handleChooseFile() { wx.chooseMessageFile({ type: "file", count: 1, success: (res) => { this.uploadFile({ ...res.tempFiles[0], fileType: res.tempFiles[0].type, tempFilePath: res.tempFiles[0].path, }).then((res) => { this.triggerEvent("file", res as object); }); }, fail() { wx.showToast({ icon: "none", title: "取消选择", }); }, }); }, uploadFile(item) { wx.showLoading({ title: "正在上传", }); return new Promise((resolve, reject) => { let url = `${app.globalData.upFileUrl}?r=file-service/upload-`; if (item.fileType === "image") { url += "img"; } else if (item.fileType === "video") { url += "video"; } else if (item.fileType === "audio") { url += "audio"; } else { url += "doc"; } wx.uploadFile({ filePath: item.tempFilePath, name: "file", url, success: (res) => { wx.hideLoading(); const data = JSON.parse(res.data); const suffix = this.GetExtensionFileName(data.data.Url); const expandJson = { fileId: "", name: "文件", size: (item.size / 1024).toFixed(2), fileUrl: data.data.Url, suffix: this.GetExtensionFileName(data.data.Url), type: item.fileType, imgUrl: "", duration: 0, fileType: this.data.fileTypeList[suffix] || 99, videoUrl: "", }; if (item.fileType === "image") { expandJson.imgUrl = data.data.Url; } else if (item.fileType === "video") { expandJson.videoUrl = data.data.SnapshotUrl; } else if (item.fileType === "audio") { expandJson.duration = Number.parseInt(String(item.duration / 1000)); } resolve(expandJson); }, fail() { wx.hideLoading(); reject(new Error("上传失败")); }, }); }); }, }, }); export {};