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

AWS S3: MaxPostPreDataLengthExceeded上传文件之前的POST请求字段太大

常俊侠
2023-03-14

我正在尝试使用AWS Javascript SDK的createPresignedPost方法将文件上载到AWS S3,
我有以下代码来生成用于上载的签名凭据-

let AWS = require('aws-sdk');
let util = require('util');

let s3Client = new AWS.S3({
    region: 'us-east-1'
});

let postSignedUrl = async () => {

    try {
        let postSigningParams = {
            Expires: 60,
            Bucket: "some-bucket-name,
            Conditions: [["content-length-range", 100, 10000000]],
            Fields: {
                key: 'test/image.jpg'
            }
        }

        let s3createPresignedPost = util.promisify(s3Client.createPresignedPost).bind(s3Client);
        let postSignedUrl = await s3createPresignedPost(postSigningParams);

        console.log('postSigningParams => ', postSignedUrl);
    } catch (error) {
        console.error(error);
    }
}

postSignedUrl();

我收到如下证书-

{
            "url": "https://s3.amazonaws.com/some-bucket-name",
            "fields": {
                "key": "test/image.jpg",
                "bucket": "some-bucket-name",
                "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
                "X-Amz-Credential": "some/credentials/us-east-1/s3/aws4_request",
                "X-Amz-Date": "20191118T020945Z",
                "X-Amz-Security-Token": "somesecuritytoken",
                "Policy": "somepolicy",
                "X-Amz-Signature": "somesignature"
            }
}

但是,当我尝试使用邮递员工具使用上述信条上传图像时,
我无法做到这一点。

我仔细检查了我的文件大小,它是5MB,
而我在创建签名url时设置的范围在100到10000000字节之间

引用-
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createPresignedPost-property

https://blog.bigbinary.com/2018/09/04/uploading-files-directly-to-s3-using-pre-signed-post-request.html

https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html

共有1个答案

萧萧迟
2023-03-14

您没有在表单数据中包含名为file的表单字段,其中包含test.jpg的内容。

使用curl做你想做的事情的典型方法是:

curl -X POST -F Content-Type=$content_type -F key=$key \
     -F acl=$acl -F Policy=$policy -F X-Amz-Credential=$credential \
     -F X-Amz-Algorithm=$algorithm -F X-Amz-Storage-Class=$storage_class \
     -F file=@$your_file_name $form_action

在上面的示例代码中,我使用shell表示法(即前缀为$)指定了所有变量(在不同的帖子中,变量的字面含义不同:)。请注意,每当curl看到一个以@为前缀的字段值时,它会将字段值的其余部分用作文件名,并将文件名的内容用作字段值。

 类似资料:
  • 问题内容: 我在Node.js中使用POST请求上传文件时遇到问题。我必须使用模块来完成该操作(无需外部npms)。服务器需要它是包含文件数据字段的多部分请求。看起来很容易,但不使用任何外部模块就很难在Node.js中完成。 我尝试使用此示例,但未成功: 问题答案: 看起来您已经在使用module了。 在这种情况下,您需要发布的只是使用其功能: 但是,如果您想从文件系统中发布一些现有文件,则可以简

  • 问题内容: 我正在执行一个使用Python请求库上传文件的简单任务。我搜索了Stack Overflow,似乎没有人遇到相同的问题,即服务器未收到该文件: 我用文件名填充了’upload_file’关键字的值,因为如果我将其保留为空白,则表示 现在我明白了 仅当文件为空时才会出现。因此,我对如何成功发送文件感到困惑。我知道该文件有效,因为如果我访问此网站并手动填写表格,它将返回一个很好的匹配对象列

  • 主要内容:Maven依赖关系,HttpClient分段上传请求示例在本教程中,我们将演示如何使用Apache HttpClient 4.5进行分段上传http请求。 Maven依赖关系 我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。 pom.xml 文件的内容如下 - HttpClient分段上传请求示例 在这个例子中,我们将演示如何使用HttpClient 4.5来分段上传文件。 我们使

  • 我正在为客户端移植Vimeo PHP库https://github.com/vimeo/vimeo-php-libColdFusion,并成功地翻译了除了视频上传POST请求之外的所有内容。PHP库使用如下cURL:

  • 在将FreshDesk集成到我的产品中时,我被用附件API创建票证所困扰。我使用高级Rest客户端测试API。我已经看到了许多关于栈溢出本身的论坛和问题,但我仍然对任何关于上传文件的多部分形式数据POST请求的回答不满意。 我想知道Advanced Rest Client中所需的请求格式以及标题 到目前为止,这是我正在使用的请求,但我没有得到正确的响应:

  • 我试着在GXT中制作一个表单来上传文件,但我在网上看到了更多的例子,我没能用一个简单的FileUploadField将文件保存在本地 Cde片段: 上面的代码是FormPanel和FileUploadField的声明。