簡體   English   中英

流星中的簡單文件上傳

[英]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-jquerytomi: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM