4

現在、アプリケーションでファイル アップロード システムを作成しています。私のバックエンドは、別のフロントエンド (Angular) の API として機能する Sails.js (10.4) です。

MongoDB インスタンスにアップロードするファイルを保存し、Sails のビルドでファイル アップロード モジュール Skipper を使用することにしました。アダプター skipper-gridfs ( https://github.com/willhuang85/skipper-gridfs ) を使用して、ファイルを mongo にアップロードしています。

ファイル自体をアップロードしても問題ありません。クライアントで dropzone.js を使用しており、アップロードされたファイルが /api/v1/files/upload に送信されます。ファイルがアップロードされます。

これを実現するために、FileController で次のコードを使用しています。

module.exports = {
    upload: function(req, res) {
        req.file('uploadfile').upload({
            // ...any other options here...
            adapter: require('skipper-gridfs'),
            uri: 'mongodb://localhost:27017/db_name.files'
        }, function(err, files) {
            if (err) {
                return res.serverError(err);
            }
            console.log('', files);
            return res.json({
                message: files.length + ' file(s) uploaded successfully!',
                files: files
            });
        });
    }
};

問題は、ファイルがアップロードされる前にファイルを処理したいということです。具体的には次の 2 つです。

  1. ファイルが許可されているかどうかを確認してください: content-type ヘッダーは、許可したいファイルの種類と一致していますか? (jpeg、png、pdf など - 基本的なファイルのみ)。
  2. ファイルが画像の場合は、imagemagick (または同様のもの) を使用して、あらかじめ定義されたいくつかのサイズにサイズ変更します。
  3. データベースにも保存されるファイル固有の情報を追加します。ファイルをアップロードしたユーザーへの参照、およびファイルが含まれるモデル (つまり、記事/コメント) への参照です。

どこから始めればいいのか、この種の機能を実装する方法がわかりません。だからどんな助けでも大歓迎です!

4

2 に答える 2

1

関数のコールバックを指定できます.upload()。例:

req.file('media').upload(function (error, files) {
  var file;

  // Make sure upload succeeded.
  if (error) {
    return res.serverError('upload_failed', error);
  }

  // files is an array of files with the properties you want, like files[0].size
}

のコールバック内で、そこからアップロードするファイルを使用してアダプタを呼び出すことができます.upload()

于 2014-08-28T11:15:32.047 に答える