我遵循了google drive SDK中提到的所有步骤。我在我的设备上创建了一个示例应用程序(android,运行jelly bean)并能够将文件上传到驱动器上。当试图下载相同的文件时,我能够获得像fileID、fileTitle、fileDownloadURL等元数据,但不能下载内容。我得到401个未经授权的错误。
我的应用程序AUTH范围是AUTH_TOKEN_TYPE=“oauth2:https://www.googleapis.com/AUTH/drive.file”;
我正在执行以下操作以获取OAUTH令牌:
AccountManager am = AccountManager.get(this);
Bundle options = new Bundle();
am.getAuthToken(
mAccount,
AUTH_TOKEN_TYPE,
options,
this,
new OnTokenAcquired(),
new Handler(){
@Override
public void handleMessage(Message msg) {
invadiateToken();
super.handleMessage(msg);
}
});
Drive buildService(final String AuthToken) {
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
Drive.Builder b = new Drive.Builder(httpTransport, jsonFactory, null);
b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
@Override
public void initialize(JsonHttpRequest request) throws IOException {
DriveRequest driveRequest = (DriveRequest) request;
driveRequest.setPrettyPrint(true);
driveRequest.setKey(API_KEY);
driveRequest.setOauthToken(AuthToken);
}
});
return b.build();
}
private void uploadLocalFileToDrive(Drive service) throws IOException{
// File's metadata.
String mimeType = "text/plain";
File body = new File();
body.setTitle("myText.txt");
body.setDescription("sample app by varun");
body.setMimeType("text/plain");
// File's content.
java.io.File fileContent = new java.io.File(mInternalFilePath);
FileContent mediaContent = new FileContent(mimeType, fileContent);
service.files().insert(body, mediaContent).execute();
}
private void downloadFileFromDrive(Drive service) throws IOException {
Files.List request;
request = service.files().list();
do {
FileList files = request.execute();
for(File file:files.getItems()){
String fieldId = file.getId();
String title = file.getTitle();
Log.e("MS", "MSV:: Title-->"+title+" FieldID-->"+fieldId+" DownloadURL-->"+file.getDownloadUrl());
if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0 ) {
GenericUrl url = new GenericUrl(file.getDownloadUrl());
HttpResponse resp = service.getRequestFactory().buildGetRequest(url).execute();
InputStream isd = resp.getContent();
Log.e("MS", "MSV:: FileOutPutStream--->"+getFilesDir().getAbsolutePath()+"/downloaded.txt");
} else {
Log.e("MS", "MSV:: downloadURL for this file is null");
}
}
request.setPageToken(files.getNextPageToken());
} while (request.getPageToken()!=null && request.getPageToken().length()>0);
}
谁能帮我一下,让我知道我做错了什么???
这是一个已知的问题,将随着Google Play Services API的发布而得到解决。
由于您的应用程序被授权使用https://www.googleapis.com/auth/drive.file
范围,并且下载endpoint不支持?key=
查询参数,因此我们的服务器无法知道是哪个项目发出请求(以确保应用程序有权读取该文件的内容)。
同时,我能推荐的唯一解决方案是使用广泛的范围:https://www.googleapis.com/auth/drive
。请只在开发您的应用程序和等待Google Play服务发布时使用它。
我正在做一个Android项目,我试图利用谷歌驱动器API,我已经得到了它的大部分工作,但我有一个问题,我如何执行下载。 我找不到任何地方我如何获得文件ID,以便我可以执行下载。为了测试,我检索了驱动器帐户中的所有文件,并将它们添加到列表数组中,然后获得列表中第一个文件的ID。 然后,我将文件ID复制到下载文件的命令中,这成功地工作了,但我不知道如何获得我想下载的特定文件的文件ID。 下面是我用来
我在做一个简单的项目上传谷歌驱动器上的文件。然后我需要“显示”这个文件给用户,通过使用html标记,这我需要知道URL到我的图像。但我不知道怎么弄。我试着添加 https://drive.google.com/file/d/
这是我收到的错误
为了参考,请注意下载/wget一个在Dropbox上共享的文件是微不足道的。