【发布时间】:2014-09-17 21:19:29
【问题描述】:
我正在尝试通过 API 将一个大 (~512 MB) 文件上传到 Google Drive。
我强烈希望使用 Java SDK 来帮助 OAuth。
我正在生成此文件并流式传输到云端硬盘,而不将其存储在任何地方。特别是,这意味着我在发送之前不知道文件的长度。
Java SDK
我查看了 Java SDK,但我认为没有办法。 com.google.api.client.http.AbstractInputStreamContent 需要实现以支持 getLength()。
HTTP
我在https://developers.google.com/drive/web/manage-uploads 上看到了对分块传输的引用(正是针对这种情况制作的)
上传文件最直接的方法是发出一个简单的上传请求。在以下情况下,此选项是一个不错的选择:
文件足够小,可以在连接失败时再次完整上传。 没有要发送的元数据。如果您计划在单独的请求中发送此资源的元数据,或者不支持或不可用元数据,这可能是正确的。 要使用简单上传,请向方法的 /upload URI 发出 POST 或 PUT 请求,并添加查询参数 uploadType=media。例如:
发布https://www.googleapis.com/upload/drive/v2/files?uploadType=media
发出简单上传请求时使用的 HTTP 标头包括:
内容类型。设置为 API 参考中指定的方法可接受的上传媒体数据类型之一。
内容长度。设置为您要上传的字节数。如果您使用分块传输编码,则不需要。
但它只应该用于“小”文件。如果它只用于小文件,它似乎与分块传输编码的点背道而驰。
我可以在不提前知道大小的情况下将大文件发送到 Google 云端硬盘吗?
【问题讨论】:
标签: java file-upload chunked-encoding google-drive-api