【发布时间】:2018-01-31 03:57:21
【问题描述】:
总的来说,我是 Meteor 和 Web 开发的新手,我想为我的流星 Web 应用程序实现以下目标:
- 用户可以单击按钮上传 .zip 文件(我希望将其存储到我的本地数据库中,因为我正在构建在 localhost 中运行的概念验证)。
- 文件与 Mongodb 集合的特定对象相关联。
- 在与该对象关联的客户端页面上,可以单击按钮下载该 .zip 文件。
我发现的所有关于此的信息要么已弃用,要么涉及到 collectionFS,要么太具体/对于小众问题。事实证明,这比问题看起来更复杂!
我要寻找的是类似教程的指南,解释如何执行此操作,或者一些有助于设置以实现上述功能的代码 sn-ps。
编辑
我已经设法使用包 tomi:meteor-upload 上传文件。
然后,这会创建一个 /.uploads 文件夹,我的文件将上传到该文件夹。
当我尝试使用<a href="/.uploads/myfilename" download target="_blank">Download</a> 从客户端下载它们时,我发现下载的文件已损坏!
我还尝试将它们上传到 /public 文件夹而不是 /.uploads 文件夹,但仍然遇到同样的问题。
看到here,但没有找到解决方案,即使我手动 chmod 777 我的文件我也会遇到问题!
谢谢!
【问题讨论】:
-
我认为您这样做的方式是使用 Picker 或 Iron Router 之类的东西公开服务器端路由,然后您的表单(包括文件)将发布到该路由。然后,服务器端路由将在 MongoDB 集合中创建文档。使用一些 JS 魔法(如 jQuery 或其他),您可以将其设为 AJAX 调用,而不是重新加载页面。
-
谢谢!但是不会有更简单的解决方案吗?我觉得在我目前的时间窗口设置所有这个系统时会遇到一些麻烦,因为我正在开始我们的开发并且我之前没有设置过类似的东西。我设法找到了一个好的包来上传文件,但后来我不能再下载它们了(编辑过的帖子)!!
-
我不知道使用 Meteor 有任何更简单的解决方案。典型的 Meteor 应用程序是 SPA(单页应用程序),这意味着路由器(Iron 路由器、流路由器等)位于客户端浏览器中并解析 URL 路径。我相信(尽管我从未亲自证明过)客户端中不匹配的 URL 模式会传递给服务器。但是,与传统的 Node.js 应用程序不同,我们没有可用的 req/res 对象。这就是像 Picker 这样的包进来的地方......它们提供了一种获取服务器请求并处理它们的方法。 (续)
-
至于设置有多复杂,这取决于您的技能水平。我自己使用过 Picker,发现按照示例代码并开始工作非常容易。就我而言,我用它来处理 REST api 调用,我认为从头到尾我在大约 20 分钟左右的时间内就有了工作代码。但是,这只会涵盖文件上传部分。您仍然需要想出一种方法来处理下载,但我也可以看到使用 Picker 或一些类似的软件包。
标签: mongodb meteor file-upload download