gpt4 book ai didi

node.js - Filepicker.io 与 Meteor : how to return an actual asset rather than a link to the asset

转载 作者:太空宇宙 更新时间:2023-11-03 22:15:01 24 4
gpt4 key购买 nike

我正在将 filepicker.io 与 Meteor 应用程序一起使用,并致力于我的应用程序的安全性。 Filepicker 提供了对创建和签名策略的支持,但对于 Meteor 的服务器端,我觉得为每个请求文件的用户创建过期策略有点过分了。

我想做的是为用户提供一个文件的间接链接。服务器使用服务器端路由(iron-router)拦截此请求,然后服务器通过包含有关该文件的元数据的文件集合检查用户是否具有该文件的权限。

正如我现在所拥有的,如果用户具有访问权限,我将为他们提供一个文件链接,其中包含签名和策略作为该链接的参数。相反,我宁愿只返回图像或文件资源,而根本不返回链接。例如。服务器端将通过只有服务器知道的链接访问文件或图像,但服务器会将该文件或图像流式传输到客户端,而不共享该文件的实际链接。

预期的代码如下所示,我真的不知道最后要做什么:

@route "file",
path: "/file/:_id"
where: "server"
action: ->
if @request.cookies.meteor_login_token
user = Meteor.users.findOne(
{"services.resume.loginTokens.hashedToken":
Accounts._hashLoginToken(@request.cookies.meteor_login_token)}
)
if user
# the files collection has metadata about each file
# these files are uploaded through filepicker
# this include file.url which is the actual link
file = share.Files.findOne(
{_id: @params._id, accessibleBy: user._id}
)
if not file
@response.writeHead(403)
@response.end()
return
else
#return the file/image from filepicker,
#e.g. file.url without actually returning the url
@response.end()

在我的研究中,它看起来像 stream可能是解决方案,但对我来说,如何在 Node.js Fiber 中做到这一点并不明显,就像 Meteor 服务器端的情况一样。

最佳答案

您可以使用webapp创建 HTTP 端点,然后使用 node's httpFilepicker 获取图像,然后将其通过管道传输到响应:

var http = Npm.require('http'),
url = Npm.require('url');

WebApp.connectHandlers.use('/file', function(req, res, next) {
// URL format: /file/:_id
var id = url.parse(req.url, true).path.substr(1); // this is _id

// replace the following parameters with filepicker stuff
http.request({
host: 'www.devbattles.com',
path: '/en/images/upload/1427871558.png'
}, function(result){
// here we just pipe the http result
res.writeHead(200, {
'Content-Type': result.headers['content-type']
});
result.pipe(res);
}).end();
});

如果您要将此代码(例如)复制到 /server/filepickerPipe.js,然后打开 http://server.com/file/test ,你会看到 this picture .

<小时/>

作为旁注:

有可能通过 DDP 提供所有这些服务。我还必须开始从第 3 方提供文件服务,因此我可能会研究它并创建一个包,以便仅通过 DDP 执行此操作,而不会干扰 HTTP 端点。不过,这是目前的解决方案。

关于node.js - Filepicker.io 与 Meteor : how to return an actual asset rather than a link to the asset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com