import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import com.volcengine.tos.TOSV2;
import com.volcengine.tos.TOSV2ClientBuilder;
import com.volcengine.tos.TosException;
import com.volcengine.tos.comm.event.DataTransferListener;
import com.volcengine.tos.comm.event.DataTransferStatus;
import com.volcengine.tos.comm.event.DataTransferType;
import com.volcengine.tos.model.object.ObjectMetaRequestOptions;
import com.volcengine.tos.model.object.PutObjectBasicInput;
import com.volcengine.tos.model.object.PutObjectInput;
import com.volcengine.tos.model.object.PutObjectOutput;
import java.io.FileInputStream;
import java.io.IOException;
public class PutObjectWithProgressExample extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
String endpoint = "your endpoint";
String region = "your region";
String accessKey = "your access key";
String secretKey = "your secret key";
String securityToken = "your security token";
String bucketName = "bucket-example";
String objectKey = "android-sdk-test-"+System.nanoTime();
String filePath = getFilesDir().getPath() + "/test.txt";
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey, securityToken);
Thread tosThread = new Thread(new Runnable() {
DataTransferListener listener = new DataTransferListener() {
public void dataTransferStatusChange(DataTransferStatus dataTransferStatus) {
if (dataTransferStatus.getType() == DataTransferType.DATA_TRANSFER_STARTED) {
Log.i("putObject", "data transfer started.");
} else if (dataTransferStatus.getType() == DataTransferType.DATA_TRANSFER_RW) {
Log.i("putObject", "data transfer, sends " + dataTransferStatus.getRwOnceBytes() +
" bytes once, has sent " + dataTransferStatus.getConsumedBytes() +
" bytes, total bytes: " + dataTransferStatus.getTotalBytes());
} else if (dataTransferStatus.getType() == DataTransferType.DATA_TRANSFER_FAILED) {
Log.i("putObject", "data transfer failed, has sent bytes: " + dataTransferStatus.getConsumedBytes() +
" , total bytes: " + dataTransferStatus.getTotalBytes());
} else if (dataTransferStatus.getType() == DataTransferType.DATA_TRANSFER_SUCCEED) {
Log.i("putObject", "data transfer finishes, has sent bytes: " + dataTransferStatus.getConsumedBytes() +
", total bytes: " + dataTransferStatus.getTotalBytes());
try(FileInputStream inputStream = new FileInputStream(filePath)){
ObjectMetaRequestOptions options = new ObjectMetaRequestOptions().setContentLength(new File(filePath).length());
PutObjectBasicInput basicInput = new PutObjectBasicInput().setBucket(bucketName).setKey(objectKey)
.setOptions(options).setDataTransferListener(listener);
PutObjectInput putObjectInput = new PutObjectInput().setPutObjectBasicInput(basicInput).setContent(inputStream);
PutObjectOutput output = tos.putObject(putObjectInput);
Log.i("putObject", "putObject succeed, object's etag is " + output.getEtag());
Log.i("putObject", "putObject succeed, object's crc64 is " + output.getHashCrc64ecma());
} catch (TosException e) {
Log.e("TosException", "putObject failed");
} catch (IOException e) {
Log.e("IOException", "putObject read file failed");