2

<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 などの明示的な構成オプションを配置できるセイルの場所がわかりません。

4

1 に答える 1

3

警告: アプリをリリースする前に...

大量のファイル アップロード、特に大きなファイルのアップロードが予想される場合は、運用環境にデプロイする前に戦略を再検討する必要があります。を置き換えることで、bodyParser ミドルウェアを手動で置き換えることができます sails.config.express.bodyParser

Express/Connect (および v0.9.x 以降の Sails) のデフォルトの bodyParser は、tmp ディレクトリを使用してファイルをバッファリングします (PHP で見られるものと同様)。アップロードされたファイルを別の場所に取得するには、ファイルを移動する必要があります。その方法について詳しくは、 http://howtonode.org/really-simple-file-uploadsをご覧ください。

あなたの冒険心に応じて、チェックアウトできる別のオプションがあります。時間があるので、Sails または Express で使用できる別のデフォルトの bodyParser に取り組んでいます。param/JSON の解析は基盤となるライブラリに従いますが、formidable の生の onPart イベントを使用して、ファイル全体をディスクに書き込むことなくストリーミング アップロードを許可します。その詳細:

于 2013-09-23T08:33:23.870 に答える