[REQ][typescript-fetch] Name downloaded files from Content-Disposition (return a File instead of an anonymous Blob)
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 35/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 停滞
- 技术栈
- typescript
调研方向
首先检查 typescript-fetch 中的 BlobApiResponse 实现,以及 typescript/http/http.mustache 中现有的文件名处理。查看生成的方法如何使用 BlobApiResponse.value(),然后验证完成后的行为是否保留 Blob 兼容性、公开所请求的文件名,并处理 Content-Disposition 的两种 filename 形式。
由索引模型根据 Issue 内容生成。
描述
For an operation whose response is a file (isResponseFile), the typescript-fetch runtime returns the body through BlobApiResponse.value():
export class BlobApiResponse {
constructor(public raw: Response) {}
async value(): Promise<Blob> {
return await this.raw.blob();
};
}
The name the server advertises in Content-Disposition (attachment; filename="invoice-2026-09.pdf") is dropped. Any client that wants to save the download under its real name has to bypass the generated method, call the xxxRaw() variant, read raw.headers and parse the header itself, and every project ends up with its own copy of that parsing.
Every other runtime in this repository already does it for the user:
typescriptgenerator:ResponseContext.getBodyAsFile()returnsnew File([data], fileName, { type })withfileNameread fromcontent-disposition(typescript/http/http.mustache).- Java (
okhttp-gson,jersey2/3,apache-httpclient,feign,native,vertx):prepareDownloadFilenames the temp file fromContent-Disposition. - Python (
api_client.mustache,__deserialize_file): idem. - C# (
ClientUtils,FileParameter): idem.
typescript-fetch is the exception.
Describe the solution you'd like
Keep BlobApiResponse, make it return a File named after Content-Disposition (empty name when the header is absent, type taken from the blob):
async value(): Promise<File> {
const blob = await this.raw.blob();
return new File([blob], parseContentDispositionFilename(this.raw.headers) ?? '', { type: blob.type });
}
plus an exported parseContentDispositionFilename(headers) handling the RFC 5987 filename*=UTF-8''... form first and the plain filename= form otherwise.
Backward compatible: File extends Blob, so the generated methods still satisfy their declared Promise<Blob> return type and existing callers keep working; callers that want the name read file.name.
Describe alternatives you've considered
- A new
FileApiResponsenext toBlobApiResponse: forces a template change inapis.mustacheand a choice for the user, for no benefit since aFileis aBlob. - Exposing only the helper and leaving
value()unchanged: still leaves every user to call the raw variant. - Doing it in application code: that is what we do today, duplicated per project.
Additional context
File is a global in browsers and in Node.js 20+ (the CI matrix of the typescript-fetch samples runs Node 20).
PR: https://github.com/OpenAPITools/openapi-generator/pull/24957
- 主要语言
- Java
- 星标
- 26.9k
- 派生
- 7.8k
- 平均合并
- 2 天 10 小时
- 30 天内合并 PR
- 180
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 提供 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
OpenAPITools/openapi-generator 的其他 Issue
-
Issue: Bug
难度 2/5 1-3 小时 新手友好度 80/100
OpenAPITools/openapi-generator#25643 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 82/100
OpenAPITools/openapi-generator#25640 ·
维护者通常 1 天内回复
-
[BUG][JAVA] Deprecated properties only get @Deprecated on the getter (base, feign, native, microprofile)可能已有人在做 @Inf1mum 于 2 天前认领。 未关闭Issue: Bug
难度 2/5 1-3 小时 新手友好度 82/100
OpenAPITools/openapi-generator#25567 ·
维护者通常 1 天内回复
-
[BUG][KOTLIN-SERVER] typeInfoAnnotation.mustache uses As.PROPERTY → discriminator property serialized twice可能已有人在做 @Inf1mum 于 9 天前认领。 未关闭Issue: Bug
难度 2/5 1-3 小时 新手友好度 62/100
OpenAPITools/openapi-generator#25524 · 1 条评论 ·
维护者通常 1 天内回复
-
[REQ][JAVA][resteasy] Support for Jackson 3 / useJackson3可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭Enhancement: Feature
难度 2/5 1-3 小时 新手友好度 78/100
OpenAPITools/openapi-generator#25364 ·
维护者通常 1 天内回复
查看 OpenAPITools/openapi-generator 的全部 Issue
相似的 Issue
-
bug emitter:client:csharp
难度 2/5 1-3 小时 新手友好度 84/100
microsoft/typespec#12572 · 1 条评论 · 1 个 reaction ·
维护者通常 1 天内回复
-
GCC 15.2: -Wcast-qual warning - cast discards const qualifier from pointer target type (H5trace.c)未关闭
难度 2/5 1-3 小时 新手友好度 73/100
维护者通常 1 天内回复
-
[Bug] RemotingHelper.connect swaps the socket send and receive buffer configuration可能已有人在做 @amalsaidov 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复
-
needs-area-label
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 2 天内回复
-
area/ai area/backend component/zeebe kind/task
难度 2/5 1-3 小时 新手友好度 68/100
维护者通常 1 天内回复