Uploading to Amazon S3 via curl route
You should specify your using bucket name and some parameters for S3. And I guess it's PUT, not POST. There are several command line samples in the internet.
file=/path/to/file/to/upload.tar.gzbucket=your-bucketresource="/${bucket}/${file}"contentType="application/x-compressed-tar"dateValue=`date -R`stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"s3Key=xxxxxxxxxxxxxxxxxxxxs3Secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsignature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`curl -X PUT -T "${file}" \ -H "Host: ${bucket}.s3.amazonaws.com" \ -H "Date: ${dateValue}" \ -H "Content-Type: ${contentType}" \ -H "Authorization: AWS ${s3Key}:${signature}" \ https://${bucket}.s3.amazonaws.com/${file}
#run this code on ec2 linux with s3 write role TOKEN=`curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`xamztoken=`curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2files3 | jq -r ".Token"`yyyymmdd=`date +%Y%m%d`s3Bucket="testfiles3bc"bucketLocation="us-east-1"s3SecretKey=`curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2files3 | jq -r '.SecretAccessKey'`s3AccessKey=`curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2files3 | jq -r ".AccessKeyId"`endpoint="testfiles3bc.s3.amazonaws.com"fileName="image.gif"contentLength=`cat ${fileName} | wc -c`contentHash=`openssl sha -sha256 -hex ${fileName} | sed 's/.* //'`contentType=`file -b --mime-type $fileName`b64=`openssl md5 -binary "$fileName" | openssl base64`acl="private"date=`date -u +%Y%m%dT%H%M%SZ`expdate_s="2022-12-30T12:00:00.000Z"region="us-east-1"p=$(cat <<POLICY | openssl base64 | tr -d \\n{ "expiration": "${expdate_s}T12:00:00.000Z", "conditions": [ {"acl": "$acl" }, {"bucket": "$s3Bucket" }, ["starts-with", "\$key", ""], ["starts-with", "$contentType", "image/"], {"x-amz-date": "$date" }, {"content-md5": "$b64" }, {"x-amz-credential": "${s3AccessKey}/${yyyymmdd}/${region}/s3/aws4_request" }, {"x-amz-security-token": "${xamztoken}" }, {"x-amz-algorithm": "AWS4-HMAC-SHA256" } ]}POLICY)stringToSign=$pecho "----------------- canonicalRequest --------------------"echo -e ${canonicalRequest}echo "----------------- stringToSign --------------------"echo -e ${stringToSign}echo "-------------------------------------------------------"# calculate the signing keyDateKey=`echo -n "${yyyymmdd}" | openssl sha -sha256 -hex -hmac "AWS4${s3SecretKey}" | sed 's/.* //'`DateRegionKey=`echo -n "${bucketLocation}" | openssl sha -sha256 -hex -mac HMAC -macopt hexkey:${DateKey} | sed 's/.* //'`DateRegionServiceKey=`echo -n "s3" | openssl sha -sha256 -hex -mac HMAC -macopt hexkey:${DateRegionKey} | sed 's/.* //'`SigningKey=`echo -n "aws4_request" | openssl sha -sha256 -hex -mac HMAC -macopt hexkey:${DateRegionServiceKey} | sed 's/.* //'`# then, once more a HMAC for the signaturesignature=`echo -en ${p} | openssl sha -sha256 -hex -mac HMAC -macopt hexkey:${SigningKey} | sed 's/.* //'`key_and_sig_args="-F X-Amz-Credential=${s3AccessKey}/${yyyymmdd}/${region}/s3/aws4_request -F X-Amz-Algorithm=AWS4-HMAC-SHA256 -F X-Amz-Signature=$signature -F X-Amz-Date=${date}"curl -v \-F key=$fileName \-F acl=$acl \$key_and_sig_args \-F "content-md5= ${b64}" \-F "Policy=$p" \-F "X-Amz-Security-Token= ${xamztoken}" \-F "file=@$fileName" \https://${s3Bucket}.s3.amazonaws.com/
It was because the parameter I set in my controller was file
but in my curl route I kept using data