微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在POST请求中以二进制形式发送pdf来自Javascript

如何解决在POST请求中以二进制形式发送pdf来自Javascript

我想要

在来自浏览器 (Javascript) 的 POST 请求正文中以二进制形式发送文件(我关注 .docx 和文本文件,但让我们以 .pdf 为例)。

主要问题

我可以在 POSTMAN 中很好地做到这一点。您可以选择“二进制”作为体型,以及中提琴!您的文件被配置为正文。但我不知道如何在 Javascript 中模仿这种行为。

我的问题是: 在客户端,在 Javascript 中,如何将文件作为二进制文件放入我的 POST 请求中?

具体来说,当您在 POST 请求中选择 Body -> Binary 时,如何将文件转换为 POSTMAN 使用的相同格式?

上下文: 我一直在使用 this guide 在 AWS 中按照我想要的方式配置所有内容。它以在 POSTMAN 中发出请求结束。但是在 POSTMAN 中将文件添加为二进制文件是一回事 - 在 Javascript 中从浏览器中添加文件是另一回事,我的主要问题是。

我通过 API Gateway 将其发送到 Lambda 函数。我已将 API 网关配置为将 application/pdf 处理为二进制文件,并使用 Lambda 函数在它到达后对其进行解码。

所以我想我想将它作为二进制 blob 提交,而不是 base64。但不确定具体如何。

JavaScript

postBinary() {
                  var settings = {
                      "url": "https:<my-aws-api>.amazonaws.com/v1/upload","method": "POST","timeout": 0,"headers": {
                        "Content-Type": "application/pdf"
                      },"data": <my pdf file here as binary>
                    };

                    $.ajax(settings).done(function (response) {
                      console.log(response);
                    });
           },

API 网关:

集成将“当没有定义模板时(推荐)”设置为“内容类型”:“应用程序/pdf”。 API 的二进制媒体类型设置了“application/pdf”。我知道我的 CORS 设置正确 - 我可以通过 POST 请求传递字符串并获取成功消息,但我想在这里处理文件,而不仅仅是一个简单的字符串。我还想避免要求客户端在其端解析数据。

我的 Lambda 函数获取文件,然后从中解析信息,然后将其发回。

Lambda 函数

import json
import base64
import boto3
BUCKET_NAME = 'my-bucket'
def lambda_handler(event,context):
    file_content = base64.b64decode(event['content'])
    
    parsed_data = some_function(file_content) # parse information from file

    return {
        'statusCode': 200,'body': {
            'file_path': file_path
        }
    }

最后,我们想要一个用户体验:选择一个文件,发送到 API,取回解析的数据。简单。

注意:我知道有很多很好的理由将文件放入 s3 而不是先通过 Lambda。但是我们的文件很小,我们并不担心在 Lambda 中占用大量的计算时间/功率。此外,我们希望避免立即发送到 s3,因为我们希望用户只需调用一次 API:在 POST 请求中发送文件获取结果。如果我们先发送到 s3,用户必须发送多个请求:请求预签名 URL,发送文件到 s3,请求解析结果。

我最关心的事实是,这在 POSTMAN 中是可能的,并且也必须通过浏览器/Javascript 才能实现。

谢谢大家!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?