【Node.js】ファイルをアップロードしよう!【Express】

Express

みなさんこんにちは、現役エンジニアのサメハックです

未経験からWebエンジニアに転職し、
正社員として5年働いたのちフリーランスとして独立しました。

Node.jsの解説シリーズです。

今回はファイルをアップロードする方法について学んでいきましょう!

駆け出しエンジニアや未経験の方、
また新入社員を指導する先輩社員にとっても
わかりやすいように解説していきます!

この記事を読むと・・・
  • Node.jsでファイルアップロードができる
本記事ではTypeScriptで記述するよ!

ファイルをアップロードしよう!

  • フロントエンドからhttp通信でファイルを送信
  • Expressでファイルを受け取る
  • 所定のフォルダにファイルを格納する

という想定で作ります。

フロントエンドはAngularで記述してるよ!

multer

Node.jsアプリケーションでファイルをアップロードするには
multerというミドルウェアライブラリを使用します

ファイルの受け渡しができるミドルウェアで ファイルの種類やサイズの制限をかけることもできるよ!

サンプルコード

フロントエンド


import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class FileUploadService {
  constructor(private http: HttpClient) { }

  /**
   * ファイルをアップロードするメソッド
   * @param {File} file - アップロードするファイル
   * @returns {Promise} - アップロードの結果を表すPromise
   */
  uploadFile(file: File): Promise {
    const formData: FormData = new FormData();
    formData.append('file', file);

    // サーバーにファイルをPOSTリクエストでアップロード
    return this.http.post('/upload', formData);
  }
}

バックエンド

const express = require('express');
const multer = require('multer');
const fs = require('fs'); // ファイルシステムモジュールを追加
const app = express();

// ファイルをアップロードするためのmulterミドルウェアを設定
const storage = multer.diskStorage({
  destination: '/my-directory/', // ファイルの保存先ディレクトリ
  filename: (req, file, callBack) => {
    callBack(null, file.originalname); // ファイル名をそのまま使う例
  }
});

const upload = multer({
  storage,
  limits: { fileSize: 1024 * 1024 * 10 }, // 10 MBまでのファイルを許可
});


// ファイルを受け取り、フォルダを作成するエンドポイント
app.post('/upload', upload.single('file'), (req, res) => {
  // ファイルの受け取りが完了したことをクライアントに応答
  res.status(200).json({ message: 'ファイルを受け取りました' });
  
  const folderPath = '/my-directory/';
  // フォルダが存在しない場合は作成
  if (!fs.existsSync(folderPath)) {
    fs.mkdirSync(folderPath, { recursive: true }); // フォルダを再帰的に作成
  }
});

// Expressアプリを起動
app.listen(3000, () => {
  console.log('Server is running on port 3000');
});
fsも併用することで同時にフォルダの作成もできるよ!

まとめ

  • fileのアップロードにはmulterを使用する

満足いただけたら、1クリックなのでSNSフォローしてもらえると嬉しいです🦈

タイトルとURLをコピーしました