added download() to the filetransfer

This commit is contained in:
Alexander Keller 2011-11-26 18:16:44 +01:00
parent 853a734f82
commit 8904c67fb5
2 changed files with 313 additions and 257 deletions

View File

@ -83,6 +83,17 @@ FileTransfer.prototype.upload = function(filePath, server, successCallback, erro
PhoneGap.exec(successCallback, errorCallback, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, debug, chunkedMode]);
};
/**
* Downloads a file form a given URL and saves it to the specified directory.
* @param sourceUrl {String} URL of the server to receive the file
* @param targetFile {String} Full path of the file on the device
* @param successCallback (Function} Callback to be invoked when upload has completed
* @param errorCallback {Function} Callback to be invoked upon error
*/
FileTransfer.prototype.download = function(sourceUrl, targetFile, successCallback, errorCallback) {
PhoneGap.exec(successCallback, errorCallback, 'FileTransfer', 'download', [targetFile, sourceUrl]);
};
/**
* Options to customize the HTTP request used to upload files.
* @constructor

View File

@ -20,8 +20,10 @@ package com.phonegap;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
@ -80,6 +82,8 @@ public class FileTransfer extends Plugin {
return new PluginResult(PluginResult.Status.JSON_EXCEPTION, "Missing filename or server name");
}
try {
if (action.equals("upload")) {
// Setup the options
String fileKey = null;
String fileName = null;
@ -88,16 +92,16 @@ public class FileTransfer extends Plugin {
fileKey = getArgument(args, 2, "file");
fileName = getArgument(args, 3, "image.jpg");
mimeType = getArgument(args, 4, "image/jpeg");
try {
JSONObject params = args.optJSONObject(5);
boolean trustEveryone = args.optBoolean(6);
boolean chunkedMode = args.getBoolean(7);
if (action.equals("upload")) {
FileUploadResult r = upload(file, server, fileKey, fileName, mimeType, params, trustEveryone, chunkedMode);
Log.d(LOG_TAG, "****** About to return a result from upload");
return new PluginResult(PluginResult.Status.OK, r.toJSONObject());
} else if (action.equals("download")) {
String r = download(file, server);
Log.d(LOG_TAG, "****** About to return a result from download");
return new PluginResult(PluginResult.Status.OK, r);
} else {
return new PluginResult(PluginResult.Status.INVALID_ACTION);
}
@ -362,6 +366,47 @@ public class FileTransfer extends Plugin {
return result;
}
/**
* Downloads a file form a given URL and saves it to the specified directory.
*
* @param server URL of the server to receive the file
* @param file Full path of the file on the file system
* @return String containing the path to the downloaded file
*/
public String download(String filePath, String sourceUrl) throws IOException {
try {
File file = new File(filePath);
file.getParentFile().mkdirs();
URL url = new URL(sourceUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();
Log.d(LOG_TAG, "Download file:" + url);
InputStream inputStream = connection.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
FileOutputStream outputStream = new FileOutputStream(file);
while ( (len1 = inputStream.read(buffer)) > 0 ) {
outputStream.write(buffer,0, len1);
}
outputStream.close();
Log.d(LOG_TAG, "Saved file: " + filePath);
} catch (IOException e) {
Log.d(LOG_TAG, e.getMessage(), e);
throw new IOException("Error while downloading");
}
return filePath;
}
/**
* Get an input stream based on file path or content:// uri
*