すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:ファイルのアップロード

最終更新日:Mar 22, 2025

このトピックでは、Link SDK for Android を使用して、HTTP/2 ストリーミングプロトコルで Alibaba Cloud IoT Platform にファイルをアップロードする方法について説明します。

概要

  • SDK for Android は、ファイルの作成や既存ファイルの上書きなど、複数のアップロード方法をサポートしています。
  • SDK for Android を使用すると、デバイスは指定されたサイズのファイルデータをアップロードし、そのサイズを超えるコンテンツを後続のアップロードでアップロードし続けることができます。 帯域幅の使用率を向上させるために、ネットワーク帯域幅に基づいてサイズ (part_len) を設定できます。

このセクションでは、src/main/java/... /H2FileManagerActivity.java を使用して、SDK for Android を使用してファイルをアップロードする方法を説明します。

初期化の実行

IStreamSender は、HTTP/2 ストリーミングチャネルの API 操作クラスです。

LinkKitInitParams params = new LinkKitInitParams();
params.deviceInfo = deviceInfo; // デモを参照してください。
// params.propertyValues = propertyValues; // その他の初期化パラメーター。
// params.connectConfig = userData;
// H2 初期化パラメーター。
IoTH2Config ioTH2Config = new IoTH2Config();
ioTH2Config.clientId = "client-id";
// {pk} をデバイスが属するプロダクトの ProductKey に置き換えます。 デフォルトでは、このパラメーターを設定する必要はありません。
// ioTH2Config.endPoint = "https://{pk}.iot-as-http2.cn-shanghai.aliyuncs.com";
params.iotH2InitParams = ioTH2Config;
// SDK の初期化を実行します。
// SDK が初期化された後、次のメソッドを使用して IStreamSender インスタンスを取得できます。
IStreamSender client = LinkKit.getInstance().getH2StreamClient();
            

接続の作成

CompletableListener は、汎用非同期コールバックインターフェイスです。

// 作成された接続またはネットワークエラーを示す例外が返される場合があります。
// client パラメーターは、初期化中に取得された IStreamSender インスタンスを示します。
client = LinkKit.getInstance().getH2StreamClient();
client.connect(new CompletableListener<Object>() {

    @Override
    public void complete(Object o) {
        // 接続が作成されます。
    }

    @Override
    public void completeExceptionally(Throwable throwable) {
        // 接続の作成に失敗しました。
    }
});
            

ファイルのアップロード

再開不可のアップロード

アップロードできるファイルの種類の詳細については、「IANA メディアタイプ」をご参照ください。

final Http2Request request = new Http2Request();
// Object Storage Service (OSS) バケットに保存されているファイルの名前。 ファイル名検証ルールの正規表現は [a-zA-Z][a-zA-Z0-9_.] * です。
request.getHeaders().add("x-file-name", "fileName");
// 同じ名前のファイルを上書きするかどうかを指定します。 有効な値:0(上書きしない)および 1(上書きする)。 デフォルト値:0。ファイルが既に存在し、デフォルト値(0)が使用されている場合、ストリームの作成に失敗します。
request.getHeaders().add("x-file-overwrite", "1");
// アップロードするファイルのタイプ。 このパラメーターが設定されていない場合、OSS は自動的に値を割り当てます。
// request.getHeaders().add("x-file-content-type", "jpg");

String serviceName = "/c/iot/sys/thing/file/upload";
// パスをアップロードするファイルのパスに置き換えます。
String filePath = "/sdcard/demo.jpg";

client.uploadFile(serviceNme, request, filePath, new CompletableDataListener<Http2Response>() {
    @Override
    public void complete(Http2Response http2Response) {
        // ファイルがアップロードされます。
    }

    @Override
    public void completeExceptionally(Throwable throwable) {
        // ファイルのアップロードに失敗しました。
    }

    @Override
    public void callBack(String fileUploadID) {
        // アップロードの ID。 再開可能なアップロードが必要な場合は、fileUploadID パラメーターを指定します。
        // 複数のコールバックが存在する場合は、後で再開可能なアップロードを行うために、fileUploadID パラメーターの最新の値を保存します。
    }
});
            

再開可能なアップロード

アップロードに失敗したファイルのアップロードを再開する必要がある場合は、fileUploadId パラメーターの最新の値を渡す必要があります。

final Http2Request request = new Http2Request();
// fileUploadId パラメーターは、最後に未完了のアップロードの ID を指定します。
request.getHeaders().add("x-file-upload-id", fileUploadId);
String serviceName = "/c/iot/sys/thing/file/upload";
// パスをアップロードするファイルのパスに置き換えます。
String filePath = "/sdcard/demo.jpg";

client.uploadFile(serviceNme, request, filePath, new CompletableDataListener<Http2Response>() {
    @Override
    public void complete(Http2Response http2Response) {
        showToast(http2Response.toString() + "success");
    }

    @Override
    public void completeExceptionally(Throwable throwable) {
        showToast(throwable.toString() + "fail");
    }

    @Override
    public void callBack(String fileUploadID) {
        fileUploadId = fileUploadID;
    }
});
            

切断

デバイスと IoT Platform 間のストリーム接続は、ファイルがアップロードされた後に切断されます。

// client パラメーターは、初期化中に取得された IStreamSender インスタンスを示します。
client.disconnect(new CompletableListener() {
    @Override
    public void complete(Object o) {
    }

    @Override
    public void completeExceptionally(Throwable throwable) {
    }
});