Upload API Usage

Business Process

  1. Step1: Obtain authorization Upload - Get Upload Credential
  2. 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"
  1. Step3: Check if the upload was successful Upload - Get Upload Check

Usage Example

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