当前位置: 首页 > 知识库问答 >
问题:

Amazon Lambda-返回docx文件-node.js

郎志
2023-03-14
module.exports = function(customENV){ return function(req, res) {
    new AWS.S3().getObject({ Bucket: aws_bucket, Key: aws_file }, function(err, data) {
        if(!err) { 
            res.set('Access-Control-Allow-Origin', "*");
            res.set('Access-Control-Allow-Methods', 'GET, POST');
            res.set('Content-Disposition', `inline; filename="rename.docx"`);

            res.type('docx');
            res.status(200);

            res.end(data.Body, 'binary');
        }
    });
}};
exports.handler = function(event, context, callback) {
    new AWS.S3().getObject({ Bucket: aws_bucket, Key: aws_file }, function(err, data) {
        if(!err) {
            var response = {
                statusCode: 200,
                headers: {
                    'Access-Control-Allow-Origin': "*",
                    'Access-Control-Allow-Methods': 'GET, POST',
                    'Content-type' : 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                    'Content-Disposition': 'inline; filename="rename.docx"'
                },
                isBase64Encoded: true,
                body: data.Body,
            };
            
            callback(null, response);
        }
    });
};

共有1个答案

凌征
2023-03-14

如果将响应更改为:

        var response = {
            statusCode: 200,
            headers: {
                'Access-Control-Allow-Origin': "*",
                'Access-Control-Allow-Methods': 'GET, POST',
                'Content-type' : 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                'Content-Disposition': 'inline; filename="rename.docx"'
            },
            isBase64Encoded: true,
            body: Buffer.from(data.Body).toString('base64'),
        };

这应该可以克服无法base64解码body错误(如果不能,请记录响应对象,以确认lambda成功返回,并且body是base64字符串)。

但是,您还需要将二进制媒体类型添加到网关部署中,否则当您发出请求时,您的响应将是base64字符串,而不是二进制。只需点击几下(完整文档):

    null
 类似资料:
  • 问题内容: 我试图做一些简单的命令来向文件中写入hello world: 这将返回一个空文件。 问题答案: Python每次之后都不会刷新文件。您要么需要使用以下命令手动刷新它: 或自己关闭它: 在实际程序中使用文件时,建议使用: 这样可以确保即使抛出异常也将关闭文件。但是,如果您想在REPL中工作,则可能要坚持手动关闭它,因为它会在尝试执行之前尝试读取全部内容。

  • 问题内容: 在PHP中,如何从包含的脚本返回到包含它的脚本? IE浏览器: 1-主脚本2-应用程序3-包含 基本上,我想从3返回2,return()不起作用。 代码2-应用 问题答案: includeme.php: main.php: 也给出相同的结果 这是PHP鲜为人知的功能之一,但是对于设置非常简单的配置文件来说可能会很好。

  • 我正在使用库python-docx解析docx文件。我需要阅读文档和段落的标题,但是我在文档中找不到任何关于文档标题的东西。有关于将标头写入新文件的文档,但没有关于读取标头的文档。有办法做到这一点吗?

  • 我正在尝试使用docx4j API强制使用docx文件的权限。 文件有两个文档保护选项。

  • 问题内容: 我有一个档案 用户来 我希望用户的浏览器开始下载文件。我怎么做?readfile是否在服务器上打开文件,这似乎是不必要的事情。有没有一种方法可以在不打开服务器的情况下返回文件? 问题答案: 我想你想要这个:

  • 问题内容: 我已经使用serverless创建了一个lambda函数。该函数通过API网关在GET请求上触发,并应从缓冲区返回pdf文件。我正在使用html- pdf 创建缓冲区,并尝试使用以下命令返回pdf文件 但是浏览器只是无法加载pdf,所以我不知道确切如何将pdf文件直接返回到浏览器。找不到解决方案。 问题答案: 好吧,我找到了答案。我的响应对象中的设置很好,我只需要手动更改API Gat