【问题标题】:How do you specify file upload directory for express within sails?您如何在 Sails 中为 express 指定文件上传目录?
【发布时间】:2013-08-26 13:56:24
【问题描述】:

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

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

对于风帆,我按照this relevant answer 编写了代码

首先,我尝试了 SkyTecLabs 的回答。策略/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 是:object, object, function, function 所以签名看起来没问题。 (我尝试返回函数 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  }));
  }
};

并且上传仍然放置在默认目录中。 Sailsexpress 和 app 的 typeofs 都是函数。

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

在这种情况下,我不知道在 Sails 中的任何地方可以放置诸如 bodyParser 之类的快速配置选项。

【问题讨论】:

    标签: file-upload express sails.js


    【解决方案1】:

    警告:发布应用之前...

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

    Express/Connect(和 Sails,从 v0.9.x 开始)中的默认 bodyParser 使用 tmp 目录来缓冲文件(类似于您在 PHP 中看到的)。要将上传的文件放到其他地方,您需要移动它们。查看http://howtonode.org/really-simple-file-uploads 了解更多关于如何做到这一点的信息。

    您可以选择另一种选择,具体取决于您的冒险精神。由于我有时间,我一直在研究可以与 Sails 或 Express 一起使用的替代默认 bodyParser。它遵循底层库进行 param/JSON 解析,但使用强大的原始 onPart 事件来允许流式上传,而无需将整个文件写入磁盘。更多详情:

    【讨论】:

      猜你喜欢
      • 2015-07-07
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多