Business Process
- Step1: Obtain authorization Upload - Get Upload Credential
- Step2: Upload local file to S3
curl --request PUT --upload-file /localPath/1.jpg "https://aigc.s3.amazonaws.com/test/1.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20241009T124044Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=AKIARMCUIMKIOTHGVNFI%2F20241009%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=1aa12251c7dafe3c899f40f6b7d71cbb3d1aab0317d4b5bc3056cd0e52cb1724"
- Step3: Check if the upload was successful Upload - Get Upload Check
Usage Example
- Note: Before using the following shell script, it is necessary to replace"your topview uid"and"your api key" .How To Get Topview Uid And Key
Use this shell script: sh Upload2S3.sh ${file full path} ${file format}
. If the file full path is /Users/upload/photo.png
, execute sh Upload2S3.sh /Users/upload/photo.png png
.
#!/bin/bash
# Check the number of parameters
if [ "$#" -ne 2 ]; then
echo "Usage: sh Upload2S3.sh <local file path> <file type>"
exit 1
fi
# Get parameters
local_file_path="$1"
file_type="$2"
# Set the request URL and headers for the production environment
base_url="https://api.topview.ai"
# eg: topview_uid="NsDAaOPF4jLuAie4ewyg"
topview_uid="<your-topview-uid>"
# eg: authorization="Bearer sk-vEsneECh1J5eKHUw4vxHI61e7FvXPnPE1625PmSt3HB"
authorization="Bearer <your-api-key>"
# Check if topview_uid and authorization have been properly filled
if [ "$topview_uid" == "<your-topview-uid>" ] || [ "$authorization" == "Bearer <your-api-key>" ]; then
echo "Error: Please fill in <your-topview-uid> and <your-api-key>"
exit 1
fi
# Request upload credentials
response=$(curl --location --request GET "${base_url}/v1/upload/credential?format=${file_type}&needAccelerateUrl" \
--header "Topview-Uid: $topview_uid" \
--header "Authorization: $authorization" \
--header 'Accept: */*' \
--header 'Connection: keep-alive')
# Parse the response
fileId=$(echo "$response" | jq -r '.result.fileId')
uploadUrl=$(echo "$response" | jq -r '.result.uploadUrl')
fileName=$(echo "$response" | jq -r '.result.fileName')
# Check if the request was successful
if [ "$(echo "$response" | jq -r '.code')" != "200" ]; then
echo "Request failed: $(echo "$response" | jq -r '.message')"
exit 1
fi
# Upload the file
upload_response=$(curl --request PUT --upload-file "$local_file_path" "$uploadUrl")
# Check if the upload was successful
if [ $? -eq 0 ]; then
# Check the file status after a successful upload
check_response=$(curl --location --request GET "${base_url}/v1/upload/check?fileId=${fileId}" \
--header "Authorization: $authorization" \
--header "Topview-Uid: $topview_uid" \
--header 'Accept: */*' \
--header 'Connection: keep-alive')
# Check the file status
result=$(echo "$check_response" | jq -r '.result')
if [ "$(echo "$check_response" | jq -r '.code')" == "200" ] && [ "$result" == "true" ]; then
echo "File uploaded successfully, fileId: $fileId, s3Key: api/upload/$topview_uid/$fileName"
else
echo "File uploaded successfully, but checking file status failed: $(echo "$check_response" | jq -r '.message')"
exit 1
fi
else
echo "File upload failed"
exit 1
fi