meteor中文件上传的所有解决方案似乎都指向将它们存储在数据库中,或者使用S3等外部服务(这是我们在上一个项目中所做的)。
BUT
有一种简单的方法可以将它们直接上传到服务器上的文件夹吗? (理想情况下不使用autoform等)。
答案 0 :(得分:1)
考虑使用CollectionFS包,它将文件存储在文件系统目录中。以下是文档中的示例:
Images = new FS.Collection("images", {
stores: [new FS.Store.FileSystem("images", {path: "~/uploads"})]
});
请注意,路径可以是任何文件系统路径,包括在项目公用文件夹中(如果您对安全性问题没有问题)。
CollectionFS还为每个文件提供了方便的方法,例如生成URL。
答案 1 :(得分:1)
我们使用tomi:upload-jquery
,tomi: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>