[英]Simple File Uploads in Meteor
流星中所有文件上傳的解決方案似乎都指向將它們存儲在數據庫中,或者使用諸如S3之類的外部服務(這是我們在上一個項目中所做的)。
但
有沒有一種簡單的方法可以將它們直接上傳到服務器上的文件夾? (理想情況下,不使用autoform等)。
考慮使用CollectionFS軟件包,該軟件包將文件存儲在文件系統目錄中。 這是文檔中的示例:
Images = new FS.Collection("images", {
stores: [new FS.Store.FileSystem("images", {path: "~/uploads"})]
});
請注意,該路徑可以是任何文件系統路徑,包括項目公用文件夾中的路徑(如果您對安全性沒問題的話)。
CollectionFS還為您提供了每個文件的便捷方法,例如生成URL。
我們使用tomi:upload-jquery
, tomi:upload-server
軟件包。 它易於使用且效果很好。
我使用ostrio:files。 盡管文檔雜亂無章,但仍有可能使其正常工作。
這是來自https://gist.github.com/shobhitg/5b367f01b6daf46a0287的簡單示例。
步驟1)在流星的“服務器”文件夾中創建一個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)
});
此時,服務器應該已經開始從本地主機的默認主頁偵聽“ 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.