public void upload(String identifier, String content) throws IOException {
        String path = genFileName(identifier);
        for (int i = 0; i < s3Options.getMaxRetries(); i++) {
            try {
                s3Client.putObject(s3Options.getBucket(), path, content);
                break;
            } catch (Exception e) {
                LOG.error("s3 dirty sink error, retry times = {}", i, e);
                if (i >= s3Options.getMaxRetries()) {
                    throw new IOException(e);
                }
                try {
                    Thread.sleep(1000L * i);
                } catch (InterruptedException ex) {
                    Thread.currentThread().interrupt();
                    throw new IOException("unable to flush; interrupted while doing another attempt", e);
                }
            }
        }
    }
Upload data to s3

@param identifier The identifier of dirty data
@param content The content that will be upload
@throws IOException The exception may be thrown when executing
inlong-sort/sort-flink/base/src/main/java/org/apache/inlong/sort/base/dirty/sink/s3/S3Helper.java