これは一応の注意喚起になりますが、
世の中にはストレージサービスが大量しますが、
無償・無制限のものは何一つとして存在しません。
何故ならば大挙して超巨大なファイルを入れまくる輩が居るからです。
例えば地デジの生データを抜き出すとTSというファイルになりますが、
30分番組で4GBやそこらになります。
アニメは1クール13話あるので4GB*13話分一気にぶち込むとか。
後は単純所持で違法になるやつですね。
児童ポルノやコンピュータ・ウィルスとか……
杜撰な管理していると捕まるのは質問者さんになります。
ファイルのアップロード・ダウンロードの共有システムを作る場合は
まず「公開範囲」を決定しましょう。
例えば家族だけとか友人とだけとか……
全世界に公開するならシビアな認証・権限管理が必要になります。
その辺りをガチで設計し始めると、AmazonのS3を借りてそのまま使うとか、
そのS3互換のWasabiを借りてそのまま使うとかになりがちです。
今現在、Reactでブラウザから受け取ったファイルをNodejsに送ることは、成功していますがファイルをどこに保存すれば良いのかわかりません。
以上の情報から既にNode.jsのfsを使えばファイルの保存は可能
こういう事は理解していると見受けられるので、
そこから先をどのようにするべきかを見ていきましょう。
自分が調べたところ、データベースにBlob型なりで保存出来るとは知ったのですが、
確かにMySQL等のデータベースにはBlob型というバイナリを保存するのに適した型が存在します。
しかし、ファイルというのは開いて取り出せるものであるべきです。
データベースには保存先のPATHを文字列として格納しておくくらいに留め、
ファイルの実体はHDDやSSDに直接保存しましょう。
まぁ、預かったSSHの認証鍵をZIP圧縮して放り込んでおくみたいな使い方はありかな?
MySQLはアカウント毎に閲覧出来るテーブルを管理出来るので、
職場で管理しているなら上司だけが閲覧出来るテーブルにそういう情報を格納し、
一般の開発者は何を間違っても顧客のSSHの認証鍵を見ちゃったみたいな事はなくなるので犯人探しが楽になりそう。
どのようにファイルを保存するのが一般的かを知りたかったです。
現場により様々です。
自社でサーバマシンを準備するオンプレ・ハウジング等では
外付けHHD・SSDや、ケースを開いてHDD・SSDを増設します。
参考記事: この1ページで一通りわかる!Linuxのマウント(mount)について
「/」のしたであればほぼどこのディレクトリでも枝を追加することは可能だ。一般的に「/mnt」もしくは「/media」にマウントすることが多い。
Node.jsのserver.jsに/mnt/files/何とかかんとか
みたいに
文字列の変数でベタ書きしてしまうと汎用性がなくなるので
環境変数かconfig.jsonみたいなファイルを用意して参照する形になります。
Node.jsはprocess.env.MEDIA
にアクセスすると環境変数MEDIA
の文字列を取得出来ます。
MEDIA="/mnt/files/なんとかかんとか
node server.js`といった感じで環境変数に値を埋め込みながら実行すると良いでしょう。
Docker等の環境変数を注入しながら起動するような仕組みもあるので普通に使われる手法です。
個人開発でHDDやSSDを組み込んだマシンを公開するバイタリティのある人間は居ないので、
基本的にはクライドストレージで管理することになるでしょう。
参考記事: AWS SDK for JavaScript
Amazon S3に限った話ではありませんが、
こういうNode.jsや他の言語から直接ストレージサービスにファイルを読み書き出来るサービスは沢山存在します。
この場合環境変数やconfigファイルで管理するのはAWSのAPIキーやトークン情報になります。
使うサービス次第になりますし、AWSなんかは組み込むだけでも一大プロジェクトになる長い道のりなので
「Node.js サービス名」で検索しながら挑戦してみてください。