/** * 模块:OptionsHandler * 功能:处理TUS协议的OPTIONS请求,返回服务器支持的TUS协议版本、扩展功能等信息 * 使用场景:在TUS文件上传协议中,客户端通过OPTIONS请求获取服务器支持的功能和配置 */ import { ALLOWED_METHODS, HEADERS, MAX_AGE } from '../utils' import { BaseHandler } from './BaseHandler' import type http from 'node:http' /** * OptionsHandler类 * 核心功能:处理TUS协议的OPTIONS请求,返回服务器支持的配置信息 * 设计模式:继承自BaseHandler,采用模板方法模式,复用基础处理逻辑 * 使用示例: * const handler = new OptionsHandler(store, options) * handler.send(req, res) */ export class OptionsHandler extends BaseHandler { /** * 处理OPTIONS请求并发送响应 * @param req - HTTP请求对象,包含客户端请求信息 * @param res - HTTP响应对象,用于向客户端返回数据 * @returns Promise 无返回值 * 功能详细描述: * 1. 获取服务器配置的最大文件大小 * 2. 设置TUS协议版本、扩展功能和最大文件大小等响应头 * 3. 配置CORS相关头信息 * 4. 返回204 No Content状态码 * 异常处理:继承自BaseHandler的异常处理机制 */ async send(req: http.IncomingMessage, res: http.ServerResponse) { // 获取服务器配置的最大文件大小 const maxSize = await this.getConfiguredMaxSize(req, null) // 设置TUS协议版本头,固定为1.0.0 res.setHeader('Tus-Version', '1.0.0') // 如果存储模块支持扩展功能,设置TUS扩展头 if (this.store.extensions.length > 0) { res.setHeader('Tus-Extension', this.store.extensions.join(',')) } // 如果配置了最大文件大小,设置TUS最大文件大小头 if (maxSize) { res.setHeader('Tus-Max-Size', maxSize) } // 合并默认和自定义的允许头信息 const allowedHeaders = [...HEADERS, ...(this.options.allowedHeaders ?? [])] // 设置CORS相关头信息 res.setHeader('Access-Control-Allow-Methods', ALLOWED_METHODS) res.setHeader('Access-Control-Allow-Headers', allowedHeaders.join(', ')) res.setHeader('Access-Control-Max-Age', MAX_AGE) // 返回204 No Content状态码,表示请求成功但无内容返回 return this.write(res, 204) } }