Meteor中的简单文件上传

时间:2015-09-18 11:37:33

标签: javascript file-upload meteor

meteor中文件上传的所有解决方案似乎都指向将它们存储在数据库中,或者使用S3等外部服务(这是我们在上一个项目中所做的)。

BUT

有一种简单的方法可以将它们直接上传到服务器上的文件夹吗? (理想情况下不使用autoform等)。

4 个答案:

答案 0 :(得分:1)

考虑使用CollectionFS包,它将文件存储在文件系统目录中。以下是文档中的示例:

Images = new FS.Collection("images", {
  stores: [new FS.Store.FileSystem("images", {path: "~/uploads"})]
});

请注意,路径可以是任何文件系统路径,包括在项目公用文件夹中(如果您对安全性问题没有问题)。

CollectionFS还为每个文件提供了方便的方法,例如生成URL。

答案 1 :(得分:1)

我们使用tomi:upload-jquerytomi:upload-server个包。它易于使用且运行良好。

答案 2 :(得分:0)

我使用ostrio:文件。尽管文档很乱,但它可以使它工作。

答案 3 :(得分:0)

以下是来自https://gist.github.com/shobhitg/5b367f01b6daf46a0287的简单示例。

步骤1)在meteor的“服务器”文件夹上创建一个javascript文件,即uploadImageServer.js

//Required packages
import fs from "fs";  //var fs = Npm.require("fs")
import os from "os";
import path from "path";

import busboy from "busboy";
var Busboy = Meteor.npmRequire('busboy');

import express  from 'express';
var app = express();

app.get(pageToListingFrom, function (req, res) {
    res.send('<html><head></head><body>\
               <form method="POST" enctype="multipart/form-data">\
                <input type="text" name="textfield"><br />\
                <input type="file" name="filefield"><br />\
                <input type="submit">\
              </form>\
            </body></html>');
  res.end();
});

// accept POST request on the homepage
var pageToListingFrom = "/";  // Page URL to listen from
app.post(pageToListingFrom, function (req, res) {
    var busboy = new Busboy({ headers: req.headers });
    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
      //saves the file to this directory
      var saveTo = path.join('D:/MeteorApp/server/', filename);
      console.log('Uploading: ' + saveTo);
      file.pipe(fs.createWriteStream(saveTo));
    });
    busboy.on('finish', function() {
      console.log('Upload complete');
      res.writeHead(200, { 'Connection': 'close' });
      res.end("That's all folks!");
    });
    return req.pipe(busboy);
});

var server = app.listen(3000, function () {
  var host = server.address().address
  var port = server.address().port

  console.log('Example app listening at http://%s:%s', host, port)
});

此时,服务器应该已经开始从localhost的默认主页收听“POST”,因为“var pageToListingFrom”设置为默认主页的URL“/”。您可以将其更改为“/ home / userprofile”;

步骤2)此后,您可以通过html FORM或javascrip发布到监听服务器。例如,在您的“客户”端的默认主页,即userprofile.html,您可以使用类似于下面的表单上传到服务器。

<html>
  <head>
  </head>
  <body>
    <form method="POST" enctype="multipart/form-data">\
      <input type="text" name="textfield">  <br>
      <input type="file" name="filefield">  <br>
      <input type="submit"> <br>
    </form>
  </body>
</html>