[REQ][typescript-fetch] Name downloaded files from Content-Disposition (return a File instead of an anonymous Blob)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 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時間
- マージ済み PR(30日)
- 180
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- 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対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン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 件 ·
メンテナーはふだん 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 日以内に返信