handler

package
v1.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 30, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ChunkUploadHandler

type ChunkUploadHandler struct {
	// contains filtered or unexported fields
}

ChunkUploadHandler 分片上传处理器。

func NewChunkUploadHandler

func NewChunkUploadHandler(svc *service.ChunkUploadService) *ChunkUploadHandler

NewChunkUploadHandler 创建分片上传处理器。

func (*ChunkUploadHandler) Abort

func (h *ChunkUploadHandler) Abort(c *gin.Context)

Abort 处理 DELETE /chunk/:upload_id.

func (*ChunkUploadHandler) Complete added in v1.2.0

func (h *ChunkUploadHandler) Complete(c *gin.Context)

Complete 处理 POST /chunk/complete——Multipart 路径的合并接口(前端携带 ETag 列表)。 代理路径请继续使用 /chunk/merge/:upload_id。

func (*ChunkUploadHandler) Init

func (h *ChunkUploadHandler) Init(c *gin.Context)

Init 处理 POST /chunk/init——创建分片上传会话。

响应字段按路径分层:

  • Instant=true:秒传命中,前端直接完成
  • UploadPath="multipart":走方案 A,按 PartURLs 直连云端 PUT
  • UploadPath="proxy"(默认):兼容老协议,前端 POST 到 /chunk

func (*ChunkUploadHandler) Merge

func (h *ChunkUploadHandler) Merge(c *gin.Context)

Merge 处理 POST /chunk/merge/:upload_id 代理路径使用。Multipart 路径请使用 POST /chunk/complete(带 parts 请求体)。

func (*ChunkUploadHandler) ReportPartETag added in v1.2.0

func (h *ChunkUploadHandler) ReportPartETag(c *gin.Context)

ReportPartETag 处理 POST /chunk/parts/report——Multipart 路径下客户端上报单片 ETag。

请求体:

{ "upload_id": "...", "part_num": 3, "etag": "\"abc...\"" }

func (*ChunkUploadHandler) Resume added in v1.2.0

func (h *ChunkUploadHandler) Resume(c *gin.Context)

Resume 处理 POST /chunk/resume——秒传 + 断点续传查询。

func (*ChunkUploadHandler) SignParts added in v1.2.0

func (h *ChunkUploadHandler) SignParts(c *gin.Context)

SignParts 处理 POST /chunk/parts/sign——按需为 Multipart 路径的 part 生成预签名 URL。

func (*ChunkUploadHandler) Status

func (h *ChunkUploadHandler) Status(c *gin.Context)

Status 处理 GET /chunk/status/:upload_id.

func (*ChunkUploadHandler) Upload

func (h *ChunkUploadHandler) Upload(c *gin.Context)

Upload 处理 POST /chunk——通过 multipart/form-data 上传单个分片(流式)。

upload_id 和 chunk_index 字段必须出现在 chunk 二进制数据之前。 这是流式 multipart 解析的固有限制。

表单字段:

  • upload_id: 会话 ID(必填,必须在 chunk 之前)
  • chunk_index: 0 起始的分片索引(必填,必须在 chunk 之前)
  • chunk_checksum: 该分片的哈希值(选填)
  • chunk: 二进制数据(必填)

type DirectUploadHandler

type DirectUploadHandler struct {
	// contains filtered or unexported fields
}

DirectUploadHandler 前端直传云存储的 Gin 处理器。

func NewDirectUploadHandler

func NewDirectUploadHandler(
	svc *service.DirectUploadService,
	verifier types.CallbackVerifier,
	onComplete func(*types.DirectUploadResult),
	urlBuilder func(storageKey string) string,
) *DirectUploadHandler

NewDirectUploadHandler 创建直传处理器。

urlBuilder 可为 nil;非 nil 时 Callback 路径返回的 result.URL 字段会被填充。

func (*DirectUploadHandler) Callback

func (h *DirectUploadHandler) Callback(c *gin.Context)

Callback 处理 POST /direct/callback — 云存储上传完成回调。

func (*DirectUploadHandler) Complete

func (h *DirectUploadHandler) Complete(c *gin.Context)

Complete 处理 POST /direct/complete — 前端主动确认上传完成。

func (*DirectUploadHandler) HasCallbackVerifier

func (h *DirectUploadHandler) HasCallbackVerifier() bool

HasCallbackVerifier 返回是否配置了回调验签器。

func (*DirectUploadHandler) IssueToken

func (h *DirectUploadHandler) IssueToken(c *gin.Context)

IssueToken 处理 POST /direct/token — 签发 STS 临时凭证。

type UploadHandler

type UploadHandler struct {
	// contains filtered or unexported fields
}

UploadHandler 普通单文件上传处理器。

func NewUploadHandler

func NewUploadHandler(svc *service.UploadService) *UploadHandler

NewUploadHandler 创建普通上传处理器。

func (*UploadHandler) Upload

func (h *UploadHandler) Upload(c *gin.Context)

Upload 处理普通单文件上传(multipart/form-data)。

使用 multipart.NewReader 实现真正的流式传输——内存恒定,不受文件大小影响。

支持任意字段顺序。如果 "file" 出现在 "checksum"/"algorithm" 之前, 这些字段为空值(不做哈希校验)。

流程:

  1. 校验 Content-Type 与 boundary
  2. 优先按 Request.ContentLength 做前置大小校验(拦截显然超限的请求, 避免恶意客户端先打满磁盘/网络再被事后拦截)
  3. 流式解析 multipart,将 file 部分交给 Service 处理

表单字段:

  • file: 二进制文件(必填)
  • checksum: 期望的文件哈希值(选填)
  • algorithm: 哈希算法 "md5" 或 "sha256"(选填)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL