NodeJSの学習を始めたばかりで、問題が残っています。サーバーにファイルをアップロードしたい。そのために、このモジュールを検索して見つけました multer 。 GitHubの例として動作する:
_var express = require('express');
var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
var app = express()
app.post('/uploadImage', upload.single('image'), function(req, res) {
console.log(req.file);
});
_
FormDataで画像を_/uploadImage
_に投稿すると、画像は_uploads/
_ディレクトリに保存されます。画像は奇妙な名前で保存されているので、元の名前で保存したいと思います。これを行うには、app.use(multer({ dest: 'uploads/' }))'
を呼び出す必要があることを理解し、次のように関数で_req.file
_にアクセスできるようになります。
_app.post('/uploadImage', function(req, res) {
console.log(req.file);
});
_
しかし、app.use()を試行するとエラーが発生します。
_TypeError: app.use() requires middleware functions
at EventEmitter.use (project\node_modules\express\lib\application
.js:209:11)
_
NodeJS 0.12.7およびExpress 4.13.1を使用しているIm
どうすればそのアップロードを達成できますか?ありがとう。
次のいずれかの形式でapp.use(multer({dest:'./uploads/'}))
を使用する必要があります。
app.use(multer({dest:'./uploads/'}).single(...));
app.use(multer({dest:'./uploads/'}).array(...));
app.use(multer({dest:'./uploads/'}).fields(...));
すなわち:
app.use(multer({dest:'./uploads/'}).single('photo'));
そして、次のようなものがあることを確認してください:
<form action="/postPhotos" enctype="multipart/form-data" method="post">
<input type="file" name="photo">
<input type="submit" value="Upload photo">
</form>
あなたのhtmlに。
var app = require('express');
var multer = require('multer');
app=express();
app.use(multer({dest:__dirname+'/file/uploads/'}).any());
app.post('/upload',function(req,res){
console.log(req.files);
res.redirect('/');
});
@ 127.0.0.1からの答えは正しいですが、Express Routerを使用している場合、コードは少し変更されます。
var express = require('express');
var multer = require('multer');
var router = express.Router();
var uploads = multer({
dest: 'public/uploads/'
});
router.post('/upload', uploads.single('avatar'), function(req, res, next) {
console.log(req.file);
//...
});
そして重要なビット、フォームエンコーディングはenctype="multipart/form-data"
既に述べたように、そのように:
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="file" name="avatar">
<input type="submit" value="Go avatar go!">
</form>
バージョン1.0.0以降
var upload = multer({ dest: 'tmp/' });
app.post('/file_upload', upload.single('photo'), function (req, res) {
Multerを使用してファイル名を変更することはできませんが、Node.jsストリームとfsモジュールを使用して、既にアップロードされたファイルのコンテンツを同じフォルダーの新しいファイル(元のファイル名として設定)にコピーし、古いファイルを削除できます。
まず、ノードスクリプトのインポートfs、パス、およびmulter。
var express = require('express');
var multer = require('multer');
var fs = require('fs');
var pathModule = require('path');
次に、以下のようにmulterを使用して、あらゆるタイプのファイルの宛先ディレクトリーを設定します。
var app = express();
app.use(multer({dest:__dirname+'/resoucres/'}).any());
問題を解決するには、streamとfsを使用します。
app.post('/uploadImage', function(request, response) {
var readerStream = fs.createReadStream(request.files[0].path);
var dest_file = pathModule.join(request.files[0].destination, request.files[0].originalname);
var writerStream = fs.createWriteStream(dest_file);
var stream = readerStream.pipe(writerStream);
stream.on('finish', function(){
fs.unlink(request.files[0].path);
});
});
App.use(multer({dest: './ uploads /'})。single( 'photo'));への変更app.jsでサーバーを起動するために私のために働く
同じ問題が発生しました。そして、私はそれを解決しました。最初の問題については、元のファイル名を取得する方法は?リクエスト全体を印刷したところ、パス「req.file.originalname」を使用して元の名前を取得できることがわかりました
その他の質問、「app.use()」の使用方法は?
refers: here