Uploading to Amazon S3 via curl route Uploading to Amazon S3 via curl route curl curl

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