<input type="file" name="myfile" id="myfile"
帆を使用してブラウザからファイルをアップロードしています。デフォルトのエクスプレスロケーション以外に配置する必要があります。ネイキッド Express で次のコードを使用します。
app.use(express.bodyParser({ keepExtensions: true, uploadDir: uploadFolder }))
帆については、この関連する回答の行に沿ってコードを書きました
まず、SkyTecLabs の回答を試してみました。policies/configfileupload.js が含まれています
'use strict';
var sailsExpress = require('../../node_modules/sails/node_modules/express'),
path = require('path');
console.log('.. initializing policies/configFileUpload');
module.exports = function configFileUpload (req, res, next) {
var uploadFolder = path.normalize(__dirname + '/../public/uploads');
console.log('.. in policies/configfileupload.js. uploadFolder=', uploadFolder);
console.log('typeofs are=',typeof req, typeof res, typeof next, typeof sailsExpress);
sailsExpress.bodyParser({ keepExtensions: true, uploadDir: uploadFolder });
next();
};
config/policies.js が含まれています
'SchedController' : {
'uploadsubmit': 'configfileupload'
}
Express は引き続きファイルをデフォルト ディレクトリにアップロードします。タイプの req、res、next、sailsexpress は、object、object、function、function であるため、署名は問題ないように見えます。(念のため configFileUpload 関数を返そうとしましたが、コントローラーは呼び出されませんでした。)
次に、mikemcneil の提案を試しました。config/express.js
'use strict';
var sailsExpress = require('../node_modules/sails/node_modules/express'),
path = require('path');
module.exports.express = {
customMiddleware: function (app) {
var uploadFolder = path.normalize(__dirname + '/../public/uploads');
console.log('.. in config/express.js. uploadFolder=', uploadFolder);
console.log('typeof sailsExpress=', typeof sailsExpress, 'typeof app=', typeof app);
app.use(sailsExpress.bodyParser({ keepExtensions: true, uploadDir: uploadFolder }));
}
};
アップロードはまだデフォルトのディレクトリに配置されていました。タイプの Sailsexpress と app はどちらも関数です。
セイルに Express ミドルウェアを含めるために上記のコードが正しい場合、おそらくこのミドルウェアは、Express の手ごわい依存関係がデータを解析してファイルをアップロードした後にのみ実行されます。
この場合、bodyParser などの明示的な構成オプションを配置できるセイルの場所がわかりません。