我正在尝试通过API将大型(~512 MB)文件上传到Google云端硬盘。
我更倾向于使用Java SDK来帮助OAuth。
我正在生成此文件并流式传输到云端硬盘而不将其存储在任何位置。特别是,这意味着在发送之前我不知道文件的长度。
Java SDK
我查看了Java SDK,但我认为没办法去做。 com.google.api.client.http.AbstractInputStreamContent
要求实施支持getLength()
。
HTTP
我在https://developers.google.com/drive/web/manage-uploads
上看到了对分块转移的引用(针对这种情况而定)上传文件最直接的方法是发出简单的上传请求。在以下情况下,此选项是一个不错的选择:
如果连接失败,文件足够小,可以完全上传。 没有要发送的元数据。如果您计划在单独的请求中发送此资源的元数据,或者没有支持或可用的元数据,则可能会出现这种情况。 要使用简单上传,请对方法&上传URI发出POST或PUT请求,并添加查询参数uploadType = media。例如:
发布https://www.googleapis.com/upload/drive/v2/files?uploadType=media
制作简单上传请求时使用的HTTP标头包括:
的Content-Type。设置为API参考中指定的方法接受的上传媒体数据类型之一。
内容长度。设置为要上载的字节数。如果您使用分块传输编码,则不需要。
但它只能用于"小"文件。如果它只用于小文件,它似乎与分块传输编码的目的背道而驰。
我可以在不知道其大小的情况下将大型文件发送到Google云端硬盘吗?
答案 0 :(得分:1)
“ X-Upload-Content-Length。设置为后续请求中要传输的上传数据的字节数。如果此请求时长度未知,则可以省略这个标题。“
深入了解Resumable上传,你应该设置好。