@nvwa-app/frontend-commons-web
Version:
78 lines • 3 kB
JavaScript
;
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