This commit is contained in:
2026-01-14 16:00:27 +08:00
parent 6618e35869
commit 745fbc05d5

View File

@@ -397,14 +397,9 @@ func (h *ComponentReportHandler) GenerateAndDownloadZip(c *gin.Context) {
} }
}() }()
// 创建带超时的上下文避免ZIP生成时间过长导致网关超时
// 设置超时时间为 25 秒,略小于服务器的 write_timeout (30秒)
ctx, cancel := context.WithTimeout(c.Request.Context(), 25*time.Second)
defer cancel()
// 生成ZIP文件 // 生成ZIP文件
zipPath, err := h.zipGenerator.GenerateZipFile( zipPath, err := h.zipGenerator.GenerateZipFile(
ctx, c.Request.Context(),
req.ProductID, req.ProductID,
req.SubProductCodes, req.SubProductCodes,
h.exampleJSONGenerator, h.exampleJSONGenerator,
@@ -412,18 +407,6 @@ func (h *ComponentReportHandler) GenerateAndDownloadZip(c *gin.Context) {
) )
if err != nil { if err != nil {
h.logger.Error("生成ZIP文件失败", zap.Error(err), zap.String("product_id", req.ProductID)) h.logger.Error("生成ZIP文件失败", zap.Error(err), zap.String("product_id", req.ProductID))
// 检查是否是超时错误
if ctx.Err() == context.DeadlineExceeded {
h.logger.Error("ZIP文件生成超时", zap.String("product_id", req.ProductID))
c.JSON(http.StatusRequestTimeout, gin.H{
"code": 504,
"message": "文件生成超时,请稍后重试",
"error": "请求处理时间过长",
})
return
}
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"code": 500, "code": 500,
"message": "生成ZIP文件失败", "message": "生成ZIP文件失败",