【API】REACT+OpenAPI+SpringでCSVアップロード機能を実装してみるよ

REACT+OpenAPI+Spring BootでCSVをアップロードする機能を実装したい!

という事で今回実装例を挙げてみたいと思います

CSVファイルのアップロード機能をReactフロントエンドで実装を見ていきます!


1. フロントエンド

フォームの作成

CSVファイルをアップロードするためのフォームを作成します

// CSVUploadForm.js

import React, { useState } from 'react';

const CSVUploadForm = ({ onFileUpload }) => {
  const [file, setFile] = useState(null);

  const handleFileChange = (event) => {
    const selectedFile = event.target.files[0];
    setFile(selectedFile);
  };

  const handleUpload = () => {
    if (file) {
      onFileUpload(file);
    }
  };

  return (
    <div>
      <input type="file" onChange={handleFileChange} />
      <button onClick={handleUpload}>アップロード</button>
    </div>
  );
};

export default CSVUploadForm;

APIとの通信

CSVファイルをアップロードするためのAPIエンドポイントを呼び出す関数を作成します
これはOpenAPIを使用している場合、OpenAPIで定義されたエンドポイントに対応するものです

// API.js

const uploadCSV = async (file) => {
  const formData = new FormData();
  formData.append('file', file);

  const response = await fetch('/api/upload/csv', {
    method: 'POST',
    body: formData,
  });

  if (!response.ok) {
    throw new Error('CSVアップロードに失敗しました。');
  }

  const result = await response.json();
  return result;
};

export { uploadCSV };

コンポーネントで使用

CSVアップロードフォームとAPI呼び出しを組み合わせてコンポーネントを作成します

// UploadComponent.js

import React from 'react';
import CSVUploadForm from './CSVUploadForm';
import { uploadCSV } from './API';

const UploadComponent = () => {
  const handleFileUpload = async (file) => {
    try {
      const result = await uploadCSV(file);
      console.log('アップロード成功:', result);
      // 成功時の処理を追加する
    } catch (error) {
      console.error('アップロードエラー:', error.message);
      // エラー時の処理を追加する
    }
  };

  return (
    <div>
      <h2>CSVアップロード</h2>
      <CSVUploadForm onFileUpload={handleFileUpload} />
    </div>
  );
};

export default UploadComponent;

ルートコンポーネントで使用

アプリケーションのルートコンポーネントでUploadComponentを呼び出します

// App.js

import React from 'react';
import UploadComponent from './UploadComponent';

const App = () => {
  return (
    <div>
      <h1>React CSVアップロード</h1>
      <UploadComponent />
    </div>
  );
};

export default App;

上記は基本的な実装例でになります

実際のプロジェクトによってはエラーハンドリングやユーザーフィードバックのための追加の機能が必要です

また、サーバーサイド(Java)の実装もOpenAPIを使用して、ファイルを受け取り、処理するように設定する必要がありますね

次にサーバ再度の実装を見ていきます


2. バックエンド

JavaでCSVファイルを受け取るためには、Spring Frameworkなどを使用してRESTfulなエンドポイントを作成し、ファイルの受け取りと処理を行います

Controllerの作成

JavaでCSVファイルを受け取るためには、Spring Frameworkなどを使用してRESTfulなエンドポイントを作成し、ファイルの受け取りと処理を行います

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/api/upload")
public class FileUploadController {

    @PostMapping("/csv")
    public ResponseEntity<String> handleCSVUpload(@RequestParam("file") MultipartFile file) {
        // ファイルの処理を行う(例: データベースに保存など)

        // 成功時のメッセージを返す
        return ResponseEntity.ok("CSVファイルが正常にアップロードされました。");
    }
}

MultipartFileの処理

MultipartFileを使用してファイルを受け取り、適切な処理を行います
この例では、ファイルをデータベースに保存することは示していますが、実際の要件に合わせて処理を変更してください!



このコードを実行するにはSpring Bootアプリケーションをビルドして実行する必要があります

通常、このようなエンドポイントは「http://localhost:8080/api/upload/csv」のようなURLで提供されます
(ポート番号はプロジェクトの設定により異なる場合があります)

なお、この例ではエラーハンドリングやセキュリティ機能が省略されていますので、プロジェクトに合わせて追加していってください

ぜひお試しくださいね!

ではっ

是非フォローしてください

最新の情報をお伝えします