Google Drive InputStreamContent需要设置长度

时间:2012-08-21 21:15:56

标签: java google-drive-api

将文件上传到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;
}

1 个答案:

答案 0 :(得分:3)

这是一个已知问题,详情如下: http://code.google.com/p/google-api-java-client/issues/detail?id=591

我们将在1.12 google-api-java-client版本中修复此问题。