范围下载指的是仅下载对象数据的一部分,可以在 getObject 接口中设置 range 参数来指定下载对象的范围。
以下代码展示如何下载对象的一部分。
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.model.object.GetObjectV2Input; import com.volcengine.tos.model.object.GetObjectV2Output; import com.volcengine.tos.model.object.ObjectMetaRequestOptions; import java.io.FileOutputStream; import java.io.IOException; public class GetObjectRangeExample extends AppCompatActivity { @Override 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 = "your bucket name"; // 需要确保下载的数据已存在 String objectKey = "your object key"; String filePath = "your file path"; 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() { @Override public void run() { try{ // 以下代码展示如何下载数据的 [0-1023] 字节到本地文件 long rangeStart = 0; long rangeEnd = 1023; ObjectMetaRequestOptions options = new ObjectMetaRequestOptions().setRange(rangeStart, rangeEnd); GetObjectV2Input input = new GetObjectV2Input().setBucket(bucketName).setKey(objectKey).setOptions(options); try(FileOutputStream fileOutputStream = new FileOutputStream(filePath); GetObjectV2Output output = tos.getObject(input)) { byte[] buffer = new byte[1024]; int length; while ((length = output.getContent().read(buffer)) != -1) { fileOutputStream.write(buffer, 0, length); } Log.i("getObject","getObject succeed, object's metadata is " + output.getGetObjectBasicOutput()); } catch (IOException e) { Log.e("IOException", "write data to file failed"); e.printStackTrace(); } } catch (TosException e) { if (e.getStatusCode() == 404) { // 下载不存在的对象会返回404 Log.e("TosException", "the object you want to download is not found"); } else { Log.e("TosException", "getObject failed"); } e.printStackTrace(); } } }); tosThread.start(); } }
关于下载对象的 API 文档,请参见 GetObject。