Javaはリクエストボディ内のファイルをどのように受け取るのですか?

Javaでは、ServletのHttpServletRequestオブジェクトを使用してリクエストボディ内のファイルを受け取ることができます。

最初に、HTMLフォームでenctype属性をmultipart/form-dataに設定する必要があります。これにより、ブラウザはリクエストボディを複数部分形式でエンコードしてファイルのアップロードをサポートします。

Javaでリクエストボディのファイルを受信する方法は、次の手順で行うことができます。

  1. Servlet内で、HttpServletRequestオブジェクトを使ってPartオブジェクトを取得します。Partオブジェクトはリクエスト本体の一部を表し、ファイルやテキストなどが含まれることがあります。
  2. ファイルパート = リクエスト.getPart(“file”); // フォーム内のファイルフィールド名は”file”です。
  3. その後、ファイルの入力ストリームを取得するためにPartオブジェクトのgetInputStream()メソッドを使用し、ファイルの内容を読み取ることができます。
  4. filePartから入力ストリームを取得して、その内容を読み取る。
  5. Partオブジェクトのwrite(String fileName)メソッドを使用して、ファイルをローカルに保存したり他の操作を行ったりすることができます。
  6. filePart.write(“目標ファイルのパス”);

以下是一个完整的例子,展示了如何接收和保存上传的文件。

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.InputStream;

@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取文件Part
        Part filePart = request.getPart("file");

        // 获取文件输入流
        InputStream inputStream = filePart.getInputStream();

        // 保存文件到本地
        filePart.write("目标文件路径");
        
        // 其他操作...
    }
}

重要なのは、前述の例で示した@MultipartConfigアノテーションは、Servletがファイルのアップロードをサポートするように構成するために使用され、具体的な要件に応じて構成できるということです。

また、Apache Commons FileUploadやSpringのMultipartFileなどのサードパーティーライブラリを使用することもでき、ファイルのアップロード処理を簡略化することができます。これらのライブラリはより高度なAPIや便利な処理方法を提供しており、プロジェクトの要件に応じて適切なライブラリを選択してファイルのアップロードを処理することができます。

bannerAds