import Axios from "axios"; import Vue from "vue"; import tokenManager from "../xim/token"; import { invokePost } from "./request"; const orgId = () => Vue.prototype.global.org?.id ?? "0"; export async function uploadFile( file: File, chatId: number, width?: number, height?: number ) { const splits = file.name.split("."); const parameter = { file_name: file.name, size: file.size, introduction: file.name, owner_type: "FILE_TYPE_CS", owner_id: chatId, org_id: orgId(), ext_type: splits[splits.length - 1], }; if (width && height) { Object.assign(parameter, { width, height }); } const token = await invokePost<{ url_id: string; sign: string; domain: string; file_name: string; id: number; }>("/xchat/personal/upload_token", await tokenManager.getToken(), parameter); const uri = `${token.domain}/gw/file/upload`; const form = new FormData(); form.append("file", file); form.append("fileId", token.url_id); form.append("fileSize", file.size.toString()); form.append("orgId", orgId()); form.append("sign", token.sign); const result = await Axios.post(uri, form, { headers: { "Content-Type": "multipart/form-data" }, }); if (result && result.data && result.data.errcode === 0) { return token.url_id; } return ""; }