差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
ファイルの分割送信 [2021/05/29 03:52] – 133.11.144.10 | ファイルの分割送信 [Unknown date] (現在) – 削除 - 外部編集 (Unknown date) 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== ファイルの分割送信 ====== | ||
- | |||
- | ===== クライアント側の実装 ===== | ||
- | |||
- | |||
- | ==== ファイルのアップロードボタンの作成 ==== | ||
- | |||
- | inputタグのtype属性に" | ||
- | |||
- | input(type=" | ||
- | | ||
- | | ||
- | ==== ファイルオブジェクトの取得 ==== | ||
- | inputタグからファイルオブジェクトを取得。inputタグのDOM要素を取得し、filesメソッドでファイルオブジェクトの一覧のリストを取得できる。そこから0番目の要素をとってきてあげればよい | ||
- | |||
- | upload_file = $("# | ||
- | |||
- | |||
- | ==== ファイルオブジェクトの分割 ==== | ||
- | [[http:// | ||
- | ファイルオブジェクトに対して、sliceメソッドを使う。 | ||
- | |||
- | let slice_size = 2 * 1024 * 1024; // | ||
- | splitFile = file.slice(0, | ||
- | |||
- | ==== ajaxを利用して非同期的にデータをサーバに送信 ==== | ||
- | 送信したいデータを格納したformDataオブジェクトを作成 | ||
- | |||
- | var formData = new FormData(); | ||
- | formData.append(' | ||
- | formData.append(' | ||
- | formData.append(' | ||
- | |||
- | ajaxでPOSTメソッドを活用してデータを送信する | ||
- | |||
- | $.ajax({ | ||
- | type: " | ||
- | url: " | ||
- | data: formData, | ||
- | processData: | ||
- | contentType: | ||
- | }) | ||
- | |||
- | ajaxが成功した時の処理を次のように記述することができる。.done以下のコールバック関数が実行される。 | ||
- | |||
- | $.ajax({ | ||
- | type: " | ||
- | url: " | ||
- | data: formData, | ||
- | processData: | ||
- | contentType: | ||
- | }) | ||
- | .done(function(res){ | ||
- | window.location.replace(" | ||
- | }) | ||
- | .fail(function(res){ | ||
- | console.log(" | ||
- | }); | ||
- | | ||
- | | ||
- | ===== サーバサイドの実装 ===== | ||
- | |||
- | ==== データの受け取り ==== | ||
- | multerのインストール | ||
- | |||
- | npm install –save multer | ||
- | |||
- | |||
- | 以下index.js | ||
- | モジュールの読み込み | ||
- | |||
- | var multer = require(" | ||
- | |||
- | データ送信先のパスの指定 | ||
- | |||
- | var upload = multer({ dest: " | ||
- | |||
- | POSTされたファイルのデータを指定した保存先に保存 | ||
- | |||
- | router.post('/ | ||
- | コールバック関数 | ||
- | }; | ||
- | | ||
- | ファイル名は以下のbody属性のfilename属性で取得できる(ファイルを分割しているとHash値がファイル名になるので注意が必要。実際のスクリプトでは元のファイル名もAjaxで送信している) | ||
- | var filename = req.file.filename; | ||
- | |||
- | |||
- | ==== 大容量データの受け取り ==== | ||
- | |||
- | app | ||