Tag: 谷歌驱动 SDK

在Google Drive Java API中设置uploadType

我遇到了与此相同的问题,但是在Java域中。 这个问题也涵盖了我想要的内容,但由于没有答案,我想我会在这里提出一些更详细的问题。 我通过编写Java应用程序来将文件备份到Google云端硬盘。 正如其他人所发现的那样,“内部服务器错误500”失败是上传时非常常见的问题,但对于小文件,实现建议的指数退避和重试工作正常。 但是,对于大型文件(任何超过几MB),故障率都高得令人无法接受。 在某些情况下,我的失败率超过50%,这使得任何长期备份工作都无法实现。 使用Google Drive v2 API插入(上传)文件时, 文档会明确指出可以使用三种上传类型:简单,多部分和可恢复。 通过向端点URL添加参数来指定上载类型。 显然,我所追求的是可恢复的上传类型。 问题 似乎没有方法可以使用API​​设置此uploadType参数。 有一个方法调用来设置每个可选参数(如此处详述),但没有嗅探将uploadType设置为可恢复的方法。 没有代码片段,没有文档,没有任何内容。 有点令人困惑的是,似乎还有一个不相关的“分块”媒体上传模式,这是默认的,我实际上已通过调用request.getMediaHttpUploader().setDirectUploadEnabled(true)禁用我的应用程序,因为它似乎对上传的可靠性没有任何影响,无论chunksize设置的是什么,它都会大大减慢上传速度。 我正在绕过API并手动构建请求,但我真的想知道是否有其他人遇到过/先解决了这个问题。 这是一个明显的遗漏,我无法相信很多人以前没有遇到它。 干杯全都。 大卫。

创建文件夹(如果Google云端硬盘中不存在)

我的应用程序适用于Google Drive Java API。 我想在Google云端硬盘的根目录中创建文件夹,只要它不存在。 我使用下面的代码来创建文件夹。 file = service.files().insert(body).execute(); 如何检查根文件夹中的文件夹存在。 我只有文件夹名称’Myapp’,而不是实例ID。

如何更新google drive api v3 java中已有的文件

我尝试过以下代码……没有运气…… private void updateFile(Drive service, String fileId) { try { File file = new File(); /********/ final java.io.File fileToUpdate = new java.io.File(“D:/Work Data/Files/pdf.pdf”); FileContent mediaContent = new FileContent(“image/pdf”, fileToUpdate); file = service.files().update(fileId, file, mediaContent).execute(); System.out.println(fileId); } catch (Exception e) { if (isDebug) { e.printStackTrace(); } } } 也试过…… private void updateFile(Drive service, String fileId) { […]

Filters.ownedByMe无法在“Android版Drive API”中使用(但在“API Client Library for Java”中正常使用)

以前,我正在使用“API Client Library for Java”在appdata文件夹中执行文件搜索。 在API Client Library for Java中搜索代码 private static void searchFromGoogleDrive(Drive drive, String qString) { try { Files.List request = drive.files().list().setQ(qString); do { FileList fileList = request.execute(); for (com.google.api.services.drive.model.File f : fileList.getItems()) { final String title = f.getTitle(); if (title == null || f.getDownloadUrl() == null || f.getDownloadUrl().length() 0); } catch (IOException […]

使用android.gms.drive从android删除/删除文件

我需要使用com.google.android.gms.drive从Google云端硬盘中删除文件。 从我在这里和网上看到的内容,“新API”中不支持删除文件。 那(还)是正确的吗? 我的意思是API不再那么新了…… 我还读到了“明确的内容和忘记” – 策略,但我不想遵循这种方法。 问题的第2部分:鉴于仍然无法通过上述API删除文件; 是否有任何简单的方法将REST API与我已编写的代码结合起来? 就像是 从GoogleApiClient获取令牌 使用令牌和文件ID激活DELETE请求 ??? 利润 编辑:新的Google Play服务(版本7.0.0 / 2015年3月)最终具有trash()方法。 有关详细信息,请参阅https://developer.android.com/reference/com/google/android/gms/drive/DriveResource.html 。 。 edit2:显然你不能对app文件夹中的文件使用trash() : Cannot trash App Folder or files inside the App Folder. :(( edit3:截至5月28日,现在可以实际删除文件。

已超出Google Drive API配额

我正在创建一个接收我的应用程序上的用户更改的频道。 主要问题是在2-3次webhook之后,我收到一条错误,指出用户已超出配额限制。 这没有任何意义,因为我只收到了2条post(我在ngrok上看到过)。 我已经在驱动器API和配额上使用谷歌控制台了。 每次收到webhook时,查询量都会增加500.因此,当用户进行两次更改并收到两个webhook时,查询数量超过了Google允许的1000次,我收到了该错误。 这是我启用频道的代码: @GET @Path(“/enable”) public void enable(@Context HttpServletRequest request, @Context HttpServletResponse response) throws IOException { Credential credential = initFlow().loadCredential(“user”); Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build(); Channel channel = new Channel(); channel.setId(UUID.randomUUID().toString()); channel.setType(“web_hook”); channel.setAddress(“https://389825dc.ngrok.io/GDriveRest/app/gdrive/webhook”); StartPageToken page = service.changes().getStartPageToken().execute(); GDrive.savedPageToken = page.getStartPageToken(); service.changes().watch(savedPageToken, channel).execute(); } 以下是webhook: @POST @Path(“/webhook”) public void webhook(@Context HttpServletRequest […]

Google Drive SDK错误

这是我访问Google云端硬盘的代码,主要来自此文章中的ArtOfWarfare : public class MainActivity extends Activity { class OnTokenAcquired implements AccountManagerCallback { boolean alreadyTriedAgain; public OnTokenAcquired() { // TODO Auto-generated constructor stub } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 3025) { switch (resultCode) { case RESULT_OK: AccountManager am = AccountManager.get(getApplicationContext()); am.getAuthToken(am.getAccounts()[0], “ouath2:” + DriveScopes.DRIVE, new Bundle(), true, new […]

使用java api将文件上传到google驱动器

DocsService client = new DocsService(“service name”); client.setUserCredentials(username,password); File file = new File(filename); URL url = new URL(“https://docs.google.com/feeds/default/private/full/?ocr=true&convert=true”); String mimeType = DocumentListEntry.MediaType.fromFileName(file.getName()).getMimeType(); DocumentEntry newDocument = new DocumentEntry(); newDocument.setTitle(new PlainTextConstruct(file.getName())); newDocument.setMediaSource(new MediaFileSource(file, mimeType)); //newDocument.setFile(file, mimeType); newDocument = client.insert(url, newDocument); System.out.println(“uploaded “+file.getName()); JOptionPane.showMessageDialog(null, “uploaded “+file.getName(), “alert”, JOptionPane.ERROR_MESSAGE); 使用此代码我上传文件但该文件作为文档上传。 意味着我上传任何类型的文件作为文档上传到谷歌驱动器

使用Java API从Google云端硬盘下载文件

我正在使用Java API来创建应用程序。 但是,我无法解决从驱动器下载文件的问题。 我正在尝试使用Google Developer页面上提供的function。 (下方链接) https://developers.google.com/drive/manage-downloads 但是,没有明确提到如何为特定文件获取/生成downloadURI。 而且我也很困惑如何使用downloadURI下载文件。 我使用以下function – private static InputStream downloadFile(Drive service, File file) { if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0) { try { HttpResponse resp = service.getRequestFactory().buildGetRequest (new GenericUrl(file.getDownloadUrl())).execute(); return resp.getContent(); } catch (IOException e) { e.printStackTrace(); return null; } } else { return null; } } 在这里,我无法获得该文件应该是该函数的输入参数。 […]

Android – Google Drive HTTP请求

我正在尝试编写一个可以将文件上传到Google云端硬盘的应用程序。 我选择通过原始http请求与此服务进行交互,因为我没有在Android上找到任何有用的API示例,因为它似乎比提供的库更轻量级。 我已经使用https://developers.google.com/oauthplayground/来获取各种调用和响应,并尝试编写一个简单的请求来返回文件列表。 通过该工具发送的请求是: POST /drive/v2/files HTTP/1.1 Host: www.googleapis.com Content-length: 0 Content-type: application/json Authorization: OAuth *token goes here* 我试图在eclipse中复制这个: URL url = new URL(“https://www.googleapis.com/drive/v2/files?v=3”); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod(“POST”); conn.setRequestProperty(“Host:”, “www.googleapis.com”); conn.setRequestProperty(“Content-length:”, “0”); conn.setRequestProperty(“Content-type:”, “application/json”); conn.setRequestProperty(“Authorization:”, “OAuth ” + token); 我在我的应用程序中有一个有效的令牌,我也尝试添加标题conn.setRequestProperty(“GData-Version:”, “3.0”)如Google文档中所指定。 我收到了响应代码400,我确定我的代码有一些明显的错误,但我没有在我看过这些看起来正确的示例之前和之后编写头请求。 任何帮助,将不胜感激。 编辑:好的,我有进一步 – 我现在得到一个401 – 有一条消息说我需要登录编辑:我现在收到来自服务器的“收到的身份validation质询为空”响应。 String token = fetchToken(); if […]