如何在流星中创建动态资产

巴勃罗

我以为这很容易。我想创建用户可以通过单击链接下载的简单文件。

将所需内容写入服务器资产/应用文件夹,然后生成一个简单链接

<a href="/new.txt" download="yourNewFile.txt">Download> me!</a>

将文件写入流星的服务器端资产文件夹很容易。并且上面的下载链接将始终下载具有您指定名称的文件。

您将在客户端的下载文件夹中获得yourNewFile.txt。但是,不幸的是,它的内容将不会是您在服务器上写的内容(new.txt)。

如果您的内容的名称最初不在公用文件夹中,那么Meteor会下载其启动html页面作为内容,这是一种奇怪的行为。我认为这是错误....将上述锚点放入默认的Meteor项目中,然后单击链接..甚至不创建公用文件夹。您会得到一个下载文件,文件名称是您要求的...

因此,如果将存根放在公用文件夹中(您知道要创建的资产的名称),则可以动态创建它们。

我以前不知道名字。有什么办法让Meteor用我要使用的新名称“更新”其资产列表?

我知道有些软件包可以做到这一点。我想像上面那样自己做,真的不应该那么难。

赛蒙特

public/文件夹专门用于静态资产。它的内容由节点http服务器提供。

如果要在服务器上动态生成资产,则可以依赖iron:router服务器端路由。

这是一个简单的例子:

lib/router.js

Router.route("/dynamic-asset/:filename",function(){
  var filename = this.params.filename;
  this.response.setHeader("Content-Disposition",
    "attachment; filename=" + filename);
  this.response.end("Hello World !");
},{
  name: "dynamic-asset",
  where: "server"
});

在服务器端路由控制器中,您可以访问this.response一个标准节点HTTP响应实例,以使用正确的服务器生成的内容响应客户端。例如,您可以使用URL中的最终参数查询Mongo集合。

client/views/download/download.html

<template name="download">
  {{#linkTo route="dynamic-asset" target="_blank" download=""}}
    Download {{filename}}
  {{/linkTo}}
</template>

client/views/parent/parent.html

<template name="parent">
  {{> download filename="new.txt"}}
</template>

linkTo块助手必须在一个范围内,在此路由参数为模板助手访问调用。它将生成一个href设置为的锚标记Router.path(route, dataContext)这意味着,如果我们的服务器端路线网址是/dynamic-asset/:filename,有数据上下文这里filename是可访问的,并设置为"new.txt"将生成此网址:/dynamic-asset/new.txt

在此示例中download{filename: "new.txt"}由于模板调用语法的原因,我们将模板的当前数据上下文设置为

请注意,target="_blank"有必要避免将其重定向到当前选项卡内的动态资产URL,并且download必须设置HTML属性以避免将链接视为浏览器应在新选项卡内打开的内容。download属性值无关紧要,因为它的值将在服务器端被覆盖。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章