[解決済み】Express 4.0でのファイルアップロード:req.filesは未定義です。
2022-04-04 09:14:29
質問
Express 4.0 で簡単なファイルアップロード機構を動作させようとしていますが、次のような問題が発生します。
undefined
に対して
req.files
の中に
app.post
のボディを使用します。以下は該当するコードです。
var bodyParser = require('body-parser');
var methodOverride = require('method-override');
//...
app.use(bodyParser({ uploadDir: path.join(__dirname, 'files'), keepExtensions: true }));
app.use(methodOverride());
//...
app.post('/fileupload', function (req, res) {
console.log(req.files);
res.send('ok');
});
... そして、付随するPugのコード。
form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data")
input(type="file", name="file", id="file")
input(type="submit", value="Upload")
解決方法
による対応に感謝します。
マスクデックス
を使用するように変更しました。
busboy
の代わりに
bodyParser
:
var fs = require('fs');
var busboy = require('connect-busboy');
//...
app.use(busboy());
//...
app.post('/fileupload', function(req, res) {
var fstream;
req.pipe(req.busboy);
req.busboy.on('file', function (fieldname, file, filename) {
console.log("Uploading: " + filename);
fstream = fs.createWriteStream(__dirname + '/files/' + filename);
file.pipe(fstream);
fstream.on('close', function () {
res.redirect('back');
});
});
});
解決方法は?
その
body-parser
モジュールは JSON と urlencoded フォーム送信のみを扱い、マルチパートは扱いません (ファイルをアップロードしている場合はそうなります)。
マルチパートの場合は、次のようなものを使用する必要があります。
connect-busboy
または
multer
または
connect-multiparty
(multiparty/formidableはもともとexpress bodyParserのミドルウェアで使われていたものです)。また、参考までに、私はbusboyの上にさらに上位のレイヤーである
reformed
. Expressミドルウェアが付属しており、単体での利用も可能です。
関連
-
[解決済み] リソースの読み込みに失敗しました: net::ERR_CONNECTION_REFUSED : Nodejs
-
[解決済み】Node.jsのエラーECONNRESETをデバッグするにはどうすればよいですか?
-
[解決済み] 非推奨パッケージに関するNPM警告メッセージ
-
[解決済み】モジュール '@babel/core' が見つかりません。
-
[解決済み] ブラウザで動作しているURLで「connect ETIMEDOUT」エラーが発生する原因は何ですか?
-
[解決済み] TypeError: コールバックはnodejsの関数ではありません。
-
[解決済み] Yarn にパッケージを強制的に再インストールさせるにはどうしたらいいですか?
-
[解決済み] Json Web Token verify() return jwt malformed
-
[解決済み] node.jsのセットアップウィザードが途中で終了してしまう
-
[解決済み] "致命的なエラーです。grunt "コマンドを実行すると、"Unable to find local grunt. "と表示されます。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「npm install」と「npm rebuild」の違いとは?
-
[解決済み] MongoClient v3.0使用時、db.collectionが関数でない
-
[解決済み] create-react-app、インストールエラー("コマンドが見つからない")。
-
[解決済み] Passport JSのreq.isAuthenticated()はどのように実装されていますか?[クローズド]
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] nvm は npm config の "prefix" オプションと互換性がありません。
-
[解決済み] DynamoDBで一括削除するにはどうしたらいいですか?
-
[解決済み] "app.use(express.cookieSession())" に "secret" オプションが必要です。
-
[解決済み] Node/Expressのファイルアップロード