curl:使用 hapijs 给下载的文件一个动态名称

curl: give downloaded file a dynamic name with hapijs

我有一个 hapi js 服务器,可以下载文件。

exports.register = function(server, options, next){
    server.route({
        method: 'GET',
        path: '/backup_balancer.zip',
        config: {
            auth: false,
            handler: function(request, reply) {
                let p = request.payload;

                let filename = 'testfilename';

                return reply.file(filePath, {
                    filename: filename
                });
            }
        }
    });
};

如果我像那样卷曲那条路线

curl -O http://localhost:8102/backup_balancer.zip

curl 然后保存一个名为 backup_balancer.zip.

的文件

现在我喜欢命名我的路线,只需下载并像这样使用它:

curl -O http://localhost:8102/download

我怎么能说 curl 和后来的浏览器来命名文件就像文件名我 return in:

return reply.file(filePath, {
    filename: filename
});

提前致谢。

更新 1

我尝试了以下但没有成功。该文件在路线的最后一部分之后被调用。有人有进一步的提示吗? 我正在使用 hapi 13.4.0

return reply.file(filePath).header('content-disposition', 'attachment; filename=testfile.zip;');

您需要指定模式和文件名才能正常工作;但我相信问题出在您对 curl 的期望行为上。请参阅 curl man page:"The remote file name to use for saving is extracted from the given URL, nothing else." 如果您同时提供文件名和模式选项,hapijs 代码(或惰性插件代码)将设置 content-disposition headers,但 curl 不会支付关注那些 headers。 curl 为您提供了一个选项来指定要在下载时保存的文件名,然后就此结束。