如果在环回中它是无效的文件格式,如何限制文件上传?

时间:2016-03-15 14:22:27

标签: file-upload loopbackjs

我通过引用How to store files with meta data in LoopBack?

添加了元数据

现在我必须在将文件类型上传到服务器之前检查文件类型是否在csv中。

现在,如果上传的文件无效,我会将其删除。有没有更好的方法来解决这个问题?

let filePath;
File.app.models.container.upload(ctx.req, ctx.result, options, function(err, fileObj) {
    if (err) {
      callback(err);
    }
    let fileInfo = fileObj.files.file[0];
    filePath = path.join("server/storage", fileInfo.container, fileInfo.name);
    if (fileInfo.type === "text/csv") {
      File.create({
        name: fileInfo.name,
        type: fileInfo.type,
        container: fileInfo.container,
        url: path.join(CONTAINERS_URL, fileInfo.container, "/download/",
          fileInfo.name)
      }, function(err, obj) {
        if (err) {
          callback(err);
        }
        callback(null, filePath);
      });
    } else {
      fs.unlinkSync(filePath); //delete if it is not csv
      let error = new Error();
      error.message = "Please upload only csv file";
      error.name = "InvalidFile";
      callback(error);
    }
  });

1 个答案:

答案 0 :(得分:1)

这就是我所做的,

middleware.json

中的

 "parse": {
    "body-parser#json": {},
    "body-parser#urlencoded": {"params": { "extended": true }}
 },
server/server.js

中的

var multer = require('multer');
var boot = require('loopback-boot');
var app = module.exports = loopback();
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data

和远程方法为,

File.remoteMethod(
  'upload', {
    description: 'Uploads a file with metadata',
    accepts: {arg: 'ctx', type: 'object', http: function(ctx) {
        console.log(ctx.req.files);
        return ctx;
      }
    },
    returns: {arg: 'fileObject', type: 'object', root: true},
    http: {verb: 'post'}
  }
);

现在ctx可以给出mime类型..

更新1:

还有另一种更简单的选择,

您可以在datasources.local.js中定义限制,如下所示,我使用filesystem提供商进行了测试

module.exports = {
  container: {
    root: "./upload",
    acl: 'public-read',
    allowedContentTypes: ['image/jpg', 'image/jpeg', 'image/png'],
    maxFileSize: 10 * 1024 * 1024
  }
}