白名单PDF嵌入

时间:2012-11-12 16:49:40

标签: javascript node.js pdf

是否存在允许只读(不保存或下载)PDF嵌入在一个域上的方式或服务?我知道有像Scribd和Slideshare这样的服务,但问题是虽然他们确实有私有选项,但据我所知,没有任何服务允许将嵌入列入白名单(例如,只允许嵌入某些域。)Vimeo可以做到这一点视频,我也不介意支付这项服务。有什么想法吗?

我也研究过PDFJS,看起来他们有一个NodeJS实现,所以我想也许PDFJS可以从服务器端的服务器上获取PDF并将其流式传输到客户端,而不会暴露原始的PDF URL。但是我找不到PDFJS的好文档。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这可以通过任何HTTP服务器实现,但由于您在问题中提到了Node,我们将使用该技术解决问题。我也在假设Express Framework。

首先,您只需将PDF作为静态文件托管在服务器上。然后,您将注册一些检测PDF请求的中间件。如果请求的主机名与“已批准”域的列表不匹配,则会将错误提供给客户端。如果域名获得批准,您将提供PDF。这与Apache中的.htaccess文件没有区别,该文件限制域/ IP或Nginx配置中的“允许”块的访问。以下是中间件功能的快速浏览......

var approved = []; // Add your approved domains here.

// Make sure this middleware comes before app.use(express.static)
app.use(function(req, res, next){
    if(req.url == '/path/to/PDF') {
        if(approved.indexOf(req.headers.host) {
            next();
        } else {
            next(new Error('Nu uh uh!')); 
        }
    } else {
        next();
    }
});

这种方式即使他们复制了嵌入代码,他们也会从服务器上得到一个错误(可能应该是403,但这些是你可以自己决定的语义)