I have tried some functions of Google drive, but I couldn't able to download the file from Drive.
Here is the code which I used
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;
}
}
When I ran the script it shows file.getDownloadUrl()
is NULL.
What did I miss here?
Now it's executing after adding the following line before I call the download function
File file1 = service.files().get(fileid).execute();
downloadFile(service,file1);
Now the problem is how to download the file with the help of 'response' which I got from the script....
Documents in Google Docs native formats won't have a downloadUrl
field, instead you can export them using the exportLinks
collection:
https://developers.google.com/drive/manage-downloads#downloading_google_documents
This is what I created to download a file from gooogle drive hope it will help you.
Please refer to this doc
/** 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();
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With