我尝试了一些Google云端硬盘的功能,但我无法从云端硬盘下载该文件。
以下是我使用的代码
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) {
// An error occurred.
e.printStackTrace();
return null;
}
} else {
// The file doesn't have any content stored on Drive.
return null;
}
}
当我运行脚本时,显示file.getDownloadUrl()
为NULL。
我在这里想念的是什么?
现在,在我调用下载函数
之前添加以下行后它正在执行File file1 = service.files().get(fileid).execute();
downloadFile(service,file1);
现在问题是如何在脚本的'响应'的帮助下下载文件....
答案 0 :(得分:5)
Google文档原生格式的文档没有downloadUrl
字段,您可以使用exportLinks
集合导出它们:
https://developers.google.com/drive/manage-downloads#downloading_google_documents
答案 1 :(得分:0)
这是我从gooogle驱动器下载文件时创建的,希望它能为您提供帮助。
/** Application name. */
private static final String APPLICATION_NAME = "Drive API Java Quickstart";
/** Directory to store user credentials for this application. */
private static final java.io.File DATA_STORE_DIR = new java.io.File(
System.getProperty("user.home"),
".credentials/n/drive-java-quickstart");
/** Global instance of the {@link FileDataStoreFactory}. */
private static FileDataStoreFactory DATA_STORE_FACTORY;
/** Global instance of the JSON factory. */
private static final JsonFactory JSON_FACTORY = JacksonFactory
.getDefaultInstance();
/** Global instance of the HTTP transport. */
private static HttpTransport HTTP_TRANSPORT;
/**
* Global instance of the scopes required by this quickstart.
*
* If modifying these scopes, delete your previously saved credentials at
* ~/.credentials/drive-java-quickstart
*/
private static final java.util.Collection<String> SCOPES = DriveScopes
.all();
static {
try {
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
} catch (Throwable t) {
t.printStackTrace();
System.exit(1);
}
}
/**
* Creates an authorized Credential object.
*
* @return an authorized Credential object.
* @throws IOException
*/
public static Credential authorize() throws IOException {
// Load client secrets.
InputStream in = Quickstart.class
.getResourceAsStream("/client_secret.json");
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline").build();
Credential credential = new AuthorizationCodeInstalledApp(flow,
new LocalServerReceiver()).authorize("user");
System.out.println("Credentials saved to "
+ DATA_STORE_DIR.getAbsolutePath());
return credential;
}
/**
* Build and return an authorized Drive client service.
*
* @return an authorized Drive client service
* @throws IOException
*/
public static Drive getDriveService() throws IOException {
Credential credential = authorize();
return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME).build();
}
public static void main(String[] args) throws IOException {
// Build a new authorized API client service.
Drive service = getDriveService();
// Print the names and IDs for up to 10 files.
FileList result = service.files().list().execute();
List<File> files = result.getFiles();
if (files == null || files.size() == 0) {
System.out.println("No files found.");
} else {
for (File file : files) {
String fname = file.getName();
String ex = fname.substring(fname.lastIndexOf(".") + 1);
try {
Files f = service.files();
HttpResponse httpResponse = null;
if (ex.equalsIgnoreCase("xlsx")) {
httpResponse = f
.export(file.getId(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
.executeMedia();
} else if (ex.equalsIgnoreCase("docx")) {
httpResponse = f
.export(file.getId(),
"application/vnd.openxmlformats-officedocument.wordprocessingml.document")
.executeMedia();
} else if (ex.equalsIgnoreCase("pptx")) {
httpResponse = f
.export(file.getId(),
"application/vnd.openxmlformats-officedocument.presentationml.presentation")
.executeMedia();
} else if (ex.equalsIgnoreCase("pdf")
|| ex.equalsIgnoreCase("jpg")
|| ex.equalsIgnoreCase("png")) {
Get get = f.get(file.getId());
httpResponse = get.executeMedia();
}
if (null != httpResponse) {
InputStream instream = httpResponse.getContent();
FileOutputStream output = new FileOutputStream(
file.getName());
try {
int l;
byte[] tmp = new byte[2048];
while ((l = instream.read(tmp)) != -1) {
output.write(tmp, 0, l);
}
} finally {
output.close();
instream.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}