如何在帆中指定文件上传目录?

时间:2013-08-23 13:29:55

标签: file-upload express sails.js

我正在使用sails从浏览器<input type="file" name="myfile" id="myfile"上传文件。我需要将它放在默认快递位置以外的位置。我将在裸体Express中使用以下代码:

app.use(express.bodyParser({ keepExtensions: true, uploadDir: uploadFolder }))

对于帆,我按照this relevant answer

的方式编写代码

首先,我尝试了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继续将文件上传到默认目录。 Typeof req,res,next,sailsexpress是:对象,对象,函数,函数,所以签名看起来还可以。 (我尝试返回函数configFileUpload以防万一,但从未调用过控制器。)

然后我尝试了mikemcneil的建议。配置/ 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  }));
  }
};

并且上传仍然放在默认目录中。 sailofs sailsexpress和app都具有功能。

如果上面的代码对于在sails中包含快速中间件是正确的,那么也许这个中间件只有在快速'强大的依赖关系解析数据并上传文件之后才会执行。

在这种情况下我不知道帆在哪里可以放置快速配置选项,例如bodyParser。

1 个答案:

答案 0 :(得分:3)

  

警告:在您发布应用程序之前......

     

如果您期望大量文件上传,特别是大文件上传,则需要在部署到生产环境之前重新考虑您的策略。您可以通过replacing sails.config.express.bodyParser手动替换bodyParser中间件。

Express / Connect中的默认bodyParser(以及Sails,从v0.9.x开始)使用tmp目录来缓冲文件(类似于你在PHP中看到的)。要在其他地方上传文件,您需要移动它们。有关如何执行此操作的详情,请查看http://howtonode.org/really-simple-file-uploads

您可以查看另一个选项,具体取决于您的冒险程度。由于我有时间,我一直在研究可以与Sails或Express一起使用的替代默认bodyParser。它遵循用于param / JSON解析的底层库,但使用formidable的原始onPart事件来允许流上载而无需将整个文件写入磁盘。更多内容: