我以为这很容易。我想创建用户可以通过单击链接下载的简单文件。
将所需内容写入服务器资产/应用文件夹,然后生成一个简单链接
<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] 删除。
我来说两句