Javascript AWS S3:MaxPostRedataLeng上载文件之前的超出您的POST请求字段太大

Javascript AWS S3:MaxPostRedataLeng上载文件之前的超出您的POST请求字段太大,javascript,amazon-web-services,amazon-s3,file-upload,aws-sdk-js,Javascript,Amazon Web Services,Amazon S3,File Upload,Aws Sdk Js,我正在尝试使用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 {

我正在尝试使用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"
            }
}
我收到如下凭证-

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字节之间

参考资料-





表单数据中没有包含名为
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
看到一个以
@
为前缀的字段值时,它会使用字段值的其余部分作为文件名,并使用文件名的内容作为字段值。

在我的例子中,关键应该是AWS S3的文件夹路径yea?yea,抱歉。我想我错了。文档对此并不十分清楚,我感觉问题在于您的
test.jpg
POST文件对象的字段名。据猜测,这是前面字段的一部分。使用
文件
作为文件的键名。也许你可以尝试一下,而不是
test.jpg
@Phil,它成功了!使用“文件”作为文件的密钥,真棒的人,谢谢!几个小时来我一直在绞尽脑汁,别怪你,那个文档可能会好得多。你应该把它写下来作为答案;我相信它将来会帮助别人