You need to enable JavaScript to run this app.
文档中心
文档控制台
注册
对象存储

对象存储

复制全文
下载 pdf
下载对象
限定条件下载(Android SDK)
复制全文
下载 pdf
限定条件下载(Android SDK)

下载对象时,可以指定一个或多个限定条件。满足限定条件则下载,不满足则返回错误且不会进行下载。

限定条件说明

TOS 支持的限定条件如下。

参数

描述

If-Modified-Since

如果指定的时间早于对象最后修改时间,则正常下载,否则返回 304 错误(Not modified)

If-Unmodified-Since

如果指定的时间等于或者晚于对象最后修改时间,则正常下载,否则返回 412 错误(Precondition failed)

If-Match

如果指定的 ETag 和待下载对象的 ETag 匹配,则正常下载,否则返回 412 错误( Precondition failed)

If-None-Match

如果指定的 ETag 和待下载对象的 ETag 不匹配,则正常下载,否则返回 304 错误(Not modified)

示例代码

以下代码展示如何设置限定条件进行对象下载。

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;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class GetObjectWithIfConditionExample 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{
                    // 以下代码展示,如果指定的时间早于对象最后修改时间,则将其下载到本地文件
                    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date date = dateFormat.parse("2022-09-13 14:36:01");
                    ObjectMetaRequestOptions options = new ObjectMetaRequestOptions().setIfModifiedSince(date);
                    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) {
                    // SDK 针对 304 状态码会返回 TosException,用户需要自行判断
                    if (e.getStatusCode() == 304) {
                        Log.e("TosException", "server return 304 not modified");
                    } else if (e.getStatusCode() == 412) {
                        // 下载不存在的对象会返回404
                        Log.e("TosException", "server return 412 precondition failed.");
                    } else 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();
                } catch (ParseException e) {
                    Log.e("ParseException", "getObject failed");
                    e.printStackTrace();
                }
            }
        });

        tosThread.start();
    }
}

相关文档

关于下载对象的 API 文档,请参见 GetObject

最近更新时间:2024.02.04 18:31:01
这个页面对您有帮助吗?
有用
有用
无用
无用