【问题标题】:meteor write file on meteor.com流星在meteor.com上写文件
【发布时间】:2013-11-26 11:56:57
【问题描述】:

我想在meteor.com上部署一个meteor应用。

不幸的是,我不得不将一些 tmp 文件写入流星的公共文件夹。

示例代码:

var fs = Npm.require('fs');
var filepath = "../../../../../public/resizing/tmp~";
fs.open(localpath, 'w', function(err,fd)
{
   if(err) throw "error opening file";
   fs.close(fd,function(){});
}

(../../../../../public是捆绑后的meteor公用文件夹的位置!)

这在我的本地机器上运行良好,因为我在公用文件夹中具有写入权限。有没有办法在部署到流星的应用程序中写入 tmp 文件?

【问题讨论】:

  • 您能否详细说明您将如何处理此文件,因为可能有一些解决方法不需要写入本地文件系统中的文件。
  • 我想使用 imagemagick 调整图像大小,然后将它们上传到 s3。在内存中缓冲图像的问题是另一种选择,但是在 js 变量中存储二进制数据似乎存在问题? (对于某些应用程序崩溃的图像)
  • 如果是这种情况,请使用filepicker.io。它完全符合您的要求。

标签: javascript node.js meteor fs


【解决方案1】:

大多数云提供商不允许访问文件系统,因为这会给架构带来太多限制。 Meteor.com 也不例外。 对于 Meteor,还存在 /public 目录被引擎预缓存的问题,因此对该文件夹的每次更改都会导致服务器重新启动(您也可以在本地计算机上看到)。

无论您要达到什么目标,都有不同的方法。最常见的是:

  • 使用外部存储系统,例如 Amazon S3。
  • 只需将您需要的文件作为新集合写入数据库。很明显如何对文本文件执行此操作,但对二进制文件同样简单 - 只需将它们转换为 base64。

【讨论】:

  • 关于服务器重启的观点实际上是不正确的,因为我在文件名的末尾放了一个'~'
  • 对,我忘了~。
【解决方案2】:

出于礼貌,Meteor 允许人们将应用程序部署到meteor.com,但我同意动态写入文件系统会给他们带来安全风险。如果这更容易,您可以打包您的应用程序并将其部署到您自己的服务器上,但您可能希望重写应用程序逻辑本身以将该数据保存在您应用程序的同一位置以外的某个位置(例如 S3)。我假设您正在尝试存储图像或其他内容。如果不是,请使用 Meteor 的数据存储并将其保留在那里。

【讨论】:

  • 是的,我将图像保存到 S3,但我会在服务器上调整它们的大小时将它们存储一小段时间。
猜你喜欢
  • 2015-10-15
  • 2012-08-01
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多