3

Googleドライブにファイルをアップロードする例では、通常FileContentクラスを使用します。これは理解しやすく、期待どおりに機能します。

私の現在のケースでは、入力が必ずしもファイルから発信されているとは限らないため、InputStreamのみを公開しています。InputStreamContentクラスを使用しようとしましたが、長さが設定されていない場合、IllegalArgumentExceptionがスローされます。

Exception in thread "main" java.lang.IllegalArgumentException
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:72)
at com.google.api.client.googleapis.media.MediaHttpUploader.getMediaContentLength(MediaHttpUploader.java:315)
at com.google.api.client.googleapis.media.MediaHttpUploader.executeUploadInitiation(MediaHttpUploader.java:333)
at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:252)
at com.google.api.services.drive.Drive$Files$Insert.executeUnparsed(Drive.java:309)
at com.google.api.services.drive.Drive$Files$Insert.execute(Drive.java:331)

InputStreamをバイト配列にコピーして、そこからサイズを取得することはできますが、これは最も効率的なアプローチではないようです。これは意図された実装ですか?javadocは、値を設定する必要があることを示していません。これは誤解を招くようです。

/**
 * Sets the content length or less than zero if not known.
 *
 * <p>
 * Defaults to {@code -1}.
 * </p>
 *
 * @since 1.5
 */
public InputStreamContent setLength(long length) {
    this.length = length;
    return this;
}
4

1 に答える 1