Upload an object to S3.
Uploads the provided content to S3 at the specified key using an HTTP PUT request. This operation requires AWS credentials to be configured in the s3_config.
@param[in] key The S3 object key (path within the bucket) where content will be stored @param[in] content The content to upload as a string @return .true. if upload succeeded, .false. on error
Note
Requires AWS credentials (access_key and secret_key) to be set in configuration.
Warning
Returns .false. if credentials are missing or upload fails.
Warning
Current implementation uses simplified authentication; production use requires AWS Signature v4.
type(s3_config) :: config
logical :: success
config%bucket = 'my-bucket'
config%access_key = 'AKIAIOSFODNN7EXAMPLE'
config%secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
call s3_init(config)
success = s3_put_object('results/output.txt', 'Hello S3!')
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | key | |||
character(len=*), | intent(in) | :: | content |
function s3_put_object(key, content) result(success) character(len=*), intent(in) :: key character(len=*), intent(in) :: content logical :: success character(len=2048) :: url character(len=4096) :: cmd character(len=256) :: tmpfile integer :: unit, ios success = .false. if (.not. initialized) return ! For public buckets without auth, PUT won't work ! This is a simplified version - real implementation needs AWS signature if (len_trim(current_config%access_key) == 0) then print *, 'Warning: PUT requires AWS credentials' return end if ! Build URL if (current_config%use_https) then write(url, '(A,A,A,A,A,A)') 'https://', & trim(current_config%bucket), '.', & trim(current_config%endpoint), '/', & trim(key) else write(url, '(A,A,A,A,A,A)') 'http://', & trim(current_config%bucket), '.', & trim(current_config%endpoint), '/', & trim(key) end if ! Create temp file with content write(tmpfile, '(A,I0,A)') '/tmp/s3_put_', getpid(), '.tmp' open(newunit=unit, file=tmpfile, status='replace', iostat=ios) if (ios /= 0) return write(unit, '(A)', iostat=ios) trim(content) close(unit) ! Build curl command for PUT (simplified - needs AWS v4 signature in reality) write(cmd, '(A,A,A,A,A)') 'curl -s -X PUT --data-binary @', & trim(tmpfile), ' "', trim(url), '"' ! Execute curl call execute_command_line(cmd, exitstat=ios) ! Clean up temp file write(cmd, '(A,A)') 'rm -f ', trim(tmpfile) call execute_command_line(cmd) success = (ios == 0) end function s3_put_object