Javaでファイルをサーバーにアップロードする方法

サーバーにファイルをアップロードするためのJavaネイティブ実装として、Apache HttpClientライブラリを使用してPOSTリクエストを送信する方法があります。簡単なコード例を以下に示します。

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.File;
import java.io.IOException;

public class FileUploader {
    public static void main(String[] args) {
        String url = "http://example.com/upload";  // 服务器端接收文件的URL
        String filePath = "path/to/file.txt";  // 要上传的文件路径

        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        // 创建文件实体
        File file = new File(filePath);
        FileBody fileBody = new FileBody(file);

        // 创建HTTP实体并添加文件实体
        HttpEntity httpEntity = MultipartEntityBuilder.create()
                .addPart("file", fileBody)
                .build();

        // 设置请求实体
        httpPost.setEntity(httpEntity);

        try {
            // 发送POST请求
            HttpResponse response = httpClient.execute(httpPost);
            // 获取响应内容
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                String responseString = EntityUtils.toString(responseEntity);
                System.out.println("Response: " + responseString);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            httpClient.getConnectionManager().shutdown();
        }
    }
}

今回の例では、HttpPost クラスを使って POST リクエストを作成し、FileBody を使ってアップロードするファイルをファイルエンティティとしてラップします。次に、MultipartEntityBuilder を使って HTTP エンティティを作成し、そこにファイルエンティティを追加します。最後に、その HTTP エンティティをリクエストのエンティティとして設定し、HttpClient を使ってリクエストを送信します。レスポンスを取得したら、レスポンスエンティティからレスポンスコンテンツを読み取ることができます。ここでは、単純にそれをプリントアウトしています。

なお、サンプルは古いDefaultHttpClientクラスを使用していますが、推奨は、ApacheのHttpClient 4.x 系の最新クラスを使用することです。

bannerAds