カテゴリ: Servlet 更新日: 2026/02/13

JavaのPart.getSubmittedFileNameメソッドの使い方を徹底解説!初心者でもわかるファイル名の取得方法

PartのgetSubmittedFileNameメソッド
PartのgetSubmittedFileNameメソッド

先生と生徒の会話形式で理解しよう

生徒

「先生、アップロードされたファイルの名前ってJavaでどうやって取り出すんですか?」

先生

「いい質問ですね。javax.servlet.http.PartgetSubmittedFileName()メソッドを使えば、アップロード時のファイル名を取得できますよ。」

生徒

「それって、ユーザーが選んだファイル名そのままなんですか?」

先生

「その通りです!それでは実際にどんなときに使うか見てみましょう。」

1. getSubmittedFileNameメソッドとは

1. getSubmittedFileNameメソッドとは
1. getSubmittedFileNameメソッドとは

Part.getSubmittedFileName()は、ユーザーがアップロードしたファイルのファイル名(フルパスではなく名前のみ)を取得するためのメソッドです。

このメソッドは、ファイルアップロード時に使われ、サーバー側でログ出力やファイル名のチェック、保存処理などに活用されます。

2. 実際のHTMLフォーム例

2. 実際のHTMLフォーム例
2. 実際のHTMLフォーム例

HTMLのフォームでファイルをアップロードする場合は、以下のように記述します:


<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadFile">
    <button type="submit">アップロード</button>
</form>

3. Servletでファイル名を取得するサンプルコード

3. Servletでファイル名を取得するサンプルコード
3. Servletでファイル名を取得するサンプルコード

以下は、JavaのServletでアップロードされたファイルのファイル名を取得して表示する例です:


@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Part filePart = request.getPart("uploadFile");
        String fileName = filePart.getSubmittedFileName();
        System.out.println("アップロードされたファイル名: " + fileName);
    }
}

4. getSubmittedFileNameの用途と注意点

4. getSubmittedFileNameの用途と注意点
4. getSubmittedFileNameの用途と注意点

getSubmittedFileName()は便利なメソッドですが、以下の点に注意が必要です:

  • ブラウザやOSによっては、ファイル名にパスが含まれていることもある
  • ユーザーが悪意あるファイル名(../など)を設定することも可能
  • ファイル名のバリデーションやサニタイズ処理を必ず行うべき

5. ファイル保存時の名前処理の例

5. ファイル保存時の名前処理の例
5. ファイル保存時の名前処理の例

取得したファイル名をそのまま保存するのは危険です。保存時は一意のIDやタイムスタンプと組み合わせて、ファイル名の衝突や上書きを防ぐ方法が推奨されます。


String fileName = filePart.getSubmittedFileName();
String safeFileName = UUID.randomUUID().toString() + "_" + fileName;
filePart.write("/upload/dir/" + safeFileName);

6. getNameとの違いを理解しよう

6. getNameとの違いを理解しよう
6. getNameとの違いを理解しよう

getSubmittedFileName()getName()は名前が似ていますが、用途は異なります:

  • getSubmittedFileName():実際にアップロードされたファイルの名前(例:cat.png
  • getName():フォームで指定されたinput要素のname属性(例:uploadFile

まとめ

まとめ
まとめ

本記事では、Javaのサーブレットにおけるファイルアップロード処理の中でも、特に使用頻度が高く、実務でも重要となるPart.getSubmittedFileNameメソッドについて詳しく解説してきました。ファイルアップロードは、多くのWebアプリケーションで利用される基本機能ですが、実装方法を正しく理解していないと、思わぬ不具合やセキュリティリスクにつながる可能性があります。その中で、アップロードされたファイル名をどのように取得し、どのように扱うかは、初心者だけでなく経験者にとっても再確認しておきたいポイントです。

getSubmittedFileNameメソッドは、ユーザーがフォームで選択したファイルの名前を取得するための仕組みであり、ログ出力、拡張子チェック、保存時の名前生成など、さまざまな場面で活用されます。一方で、取得できるファイル名はユーザー入力に近い情報であるため、そのまま信用して処理を進めるのは危険です。記事内で紹介したように、パス情報が含まれるケースや、不正な文字列が含まれる可能性を考慮し、必ずバリデーションやサニタイズを行うことが重要です。

また、getNameメソッドとの違いを理解することで、フォーム項目名と実際のファイル名を混同せずに済みます。これを正しく理解しているかどうかで、サーブレットのコードの読みやすさや保守性にも大きな差が出てきます。さらに、UUIDやタイムスタンプを利用した安全なファイル名生成の考え方は、実務レベルのアプリケーション開発ではほぼ必須の知識といえるでしょう。

以下では、これまで学んだ内容を整理するために、改めてサンプルプログラムを確認し、その後に先生と生徒の会話形式で理解を深めていきます。記事全体を通して、ファイルアップロード処理の流れと、Part.getSubmittedFileNameの役割が自然につながるように振り返ってみてください。

サンプルプログラムで振り返るポイント

ここでは、まとめとしてシンプルなサーブレットのコード例を再度確認します。基本構造は記事中で紹介したものと同じで、HttpServlet@WebServlet@MultipartConfigを利用した構成です。重要なのは、ファイル名を取得したあとに、その扱い方を意識することです。


@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Part filePart = request.getPart("uploadFile");
        String originalFileName = filePart.getSubmittedFileName();

        String safeFileName = UUID.randomUUID().toString() + "_" + originalFileName;
        filePart.write("/upload/dir/" + safeFileName);

        System.out.println("保存されたファイル名: " + safeFileName);
    }
}

このように、getSubmittedFileNameで取得した値は、そのまま使うのではなく、安全な形に加工してから保存するのが基本です。この考え方を身につけておくことで、ファイルアップロード機能を安心して実装できるようになります。

先生と生徒の振り返り会話

生徒

「今回の記事を通して、ファイル名を取得するだけでも、いろいろ注意点があることが分かりました。」

先生

「そうですね。Part.getSubmittedFileNameはとても便利ですが、ユーザーが入力した情報だという意識が大切です。」

生徒

「最初は、取得したファイル名をそのまま保存すればいいと思っていました。」

先生

「初心者のうちは、そう考えがちです。でも、ファイル名の衝突や不正な文字列を防ぐために、UUIDを使う方法などを覚えておくと安心ですね。」

生徒

「あと、getNameとの違いも、今ならはっきり説明できそうです。」

先生

「それは良い理解です。フォームのname属性と、実際のファイル名は別物だと意識できれば、サーブレットの処理も整理しやすくなります。」

生徒

「ファイルアップロード処理が、前よりも身近に感じられるようになりました。」

先生

「その感覚を大事にしてください。今回学んだ内容は、実務でもよく使うので、ぜひ何度も書いて体に覚えさせていきましょう。」

サーブレットやJSPの基礎を体系的に理解したい人には、 定番の入門書がこちらです。

スッキリわかるサーブレット&JSP入門をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Servlet
JavaのHttpServletRequestクラスを初心者向けに徹底解説!
更新記事
New2
Thymeleaf
Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
更新記事
New3
Thymeleaf
Thymeleaf th:ifとは?使い方と条件分岐のコツを解説
更新記事
New4
Spring
Spring Bootの@Profileとspring.profiles.activeの使い方を完全ガイド!初心者向けプロファイル活用術
新規投稿
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.3
Java&Spring記事人気No3
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.4
Java&Spring記事人気No4
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.5
Java&Spring記事人気No5
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.6
Java&Spring記事人気No6
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.7
Java&Spring記事人気No7
Java
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JSP
JSPでCSSやJSを読み込む基本!外部ファイルのパス指定に注意しよう

💻 作業効率アップに

長時間のコーディングでも疲れにくい♪ 静音ワイヤレスマウス

Logicool Signature M750 を見る

※ Amazon広告リンク