使用适用于Android的Google云端硬盘API(GDAA)将大型文件上传到Google云端硬盘

时间:2016-10-09 09:44:25

标签: google-drive-android-api

我意识到之前已经问过similar questions。然而,他们都没有得到回答。

我的问题如下:

要将文件上传到Google云端硬盘,您需要创建DriveContents

你要么是凭空创造它们来做到这一点:

DriveApi.DriveContentsResult driveContentsResult = Drive.DriveApi.newDriveContents(getGoogleApiClient()).await();
DriveContents contents = driveContentsResult.getDriveContents();

或者您可以通过打开现有文件来执行此操作:

DriveApi.DriveContentsResult driveContentsResult = driveFileResult.getDriveFile().open(getGoogleApiClient(), DriveFile.MODE_WRITE_ONLY, null).await();
DriveContents contents = driveContentsResult.getDriveContents();

您现在可以使用数据填充DriveContents了。您可以通过获取OutputStream并写入此OutputStream来执行此操作:

FileOutputStream fileOutputStream = new FileOutputStream(driveContentsResult.getDriveContents().getParcelFileDescriptor().getFileDescriptor());

现在这是问题启动的地方:填写此OutputStream Google Play服务只需复制我要上传的文件并创建本地副本。如果手机上有0.5 GB的可用空间,并且您想要上传1.3 GB的文件,则无法使用!没有足够的存储空间。

那怎么办?有没有办法通过GDAA直接上传到Google云端硬盘,而不是首先创建本地副本,然后上传它?

Google REST API是否可以处理这些上传内容?可以通过Google REST API完成吗?

修改 看来这不能通过GDAA来完成。对于想要使用Google REST API进行可恢复上传的方式的人,请查看my example here on StackOverflow

1 个答案:

答案 0 :(得分:1)

我不确定是否可以,但您肯定可以尝试使用Google REST API上传文件。

您可以使用Multipart uploadResumable upload

  

分段上传

     
      
  • 如果您要将元数据与要上传的数据一起发送,则可以生成单个多部分/相关请求。如果您发送的数据足够小,可以在连接失败时再次完整上传,这是一个不错的选择。
  •   
     

可恢复上传

     
      
  • 要更可靠地上传数据文件,您可以使用可恢复的上传协议。此协议允许您在通信故障中断数据流后恢复上载操作。如果您要传输大文件并且网络中断或其他传输故障的可能性很高(例如,从移动客户端应用程序上载时),此功能尤其有用。它还可以在网络出现故障时减少您的带宽使用,因为您不必从头开始重新启动大型文件上传。
  •   

您必须记住,如SO question中所述:

  1. GDAA的主要标识符,DriveId仅存在于GDAA(GooPlaySvcs)中,并且在REST Api中不存在。
  2. 只有在GDAA提交(上传)文件/文件夹后才能从DriveId获取ResourceId)
  3. 由于GDAA'缓冲'会导致很多时间问题。网络请求它自己的时间表(系统优化),而REST Api让你的应用程序控制等待响应..
  4. 最后,您可以在android中检查有关令牌和身份验证的相关SO question。 seanpj还有一些可能对你有帮助的GDAAREST api的例子。

    希望这有帮助。