UNPKG

@nvwa-app/frontend-commons-web

Version:
78 lines 3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebHttpService = void 0; const axios_1 = __importDefault(require("axios")); class WebHttpService { constructor(baseUrl, toLoginPage, timeout) { this.toLoginPage = toLoginPage; this.axiosInstance = axios_1.default.create({ baseURL: baseUrl, timeout: timeout || 10000, headers: { "Content-Type": "application/json", }, }); } async request(handleUnauthorized, method, url, data, headers, timeout) { try { const config = { method: method.toLowerCase(), url, data, headers, }; const response = await this.axiosInstance.request(config); if (response.status === 401) { handleUnauthorized(); throw new Error("未登录"); } return { status: response.status, body: response.data, headers: response.headers, }; } catch (error) { // 统一错误处理 if (error.response) { throw new Error(`HTTP ${error.response.status}: ${error.response.data?.message || error.message}`); } else if (error.request) { throw new Error("网络请求失败,请检查网络连接"); } else { throw new Error(error.message || "请求失败"); } } } async uploadFile(handleUnauthorized, file) { try { // 1. 调用后端接口获取预签名上传URL const uploadUrlResponse = await this.request(handleUnauthorized, "POST", "/api/storage/generateUploadUrl", { fileName: file.name, fileSize: file.size, fileType: file.type, }); const { url: uploadUrl } = uploadUrlResponse.body; if (!uploadUrl) { throw new Error("获取上传URL失败"); } // 2. 直接PUT文件到预签名URL const uploadResponse = await this.request(handleUnauthorized, "PUT", uploadUrl, file, { "Content-Type": file.type, }); // 3. 返回文件访问URL(通常预签名URL包含文件路径信息) // 如果后端返回的是完整的文件访问URL,直接返回 // 否则需要从预签名URL中提取文件路径 return { url: uploadUrl.split("?")[0] }; // 去掉查询参数,返回文件路径 } catch (error) { throw new Error(`文件上传失败: ${error.message}`); } } } exports.WebHttpService = WebHttpService; //# sourceMappingURL=http.js.map