PhoneGap下载插件

时间:2012-06-10 10:46:02

标签: jquery-mobile cordova phonegap-plugins

这是我的phonegap和jquery应用程序的下载器插件..这个插件正在运行,但我想更改修复的网址(" http://farm9.staticflickr.com/ 8010/7293758472_823d2eef5c_z.jpg")到当前网址 ..(我想从当前网址下载jpg).thanx

Downloader.java

package com.phonegap.plugins.downloader;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;

public class Downloader extends Plugin {

@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {

    if (!action.equals("downloadFile")) 
        return new PluginResult(PluginResult.Status.INVALID_ACTION);

    try {

        String fileUrl = args.getString(0);
        JSONObject params = args.getJSONObject(1);

        String fileName = params.has("fileName") ? 
                params.getString("fileName"):
                fileUrl.substring(fileUrl.lastIndexOf("/")+1);


        String dirName = params.has("dirName") ?
                params.getString("dirName"):
                "sdcard/PhotoBunch";

        Boolean overwrite = params.has("overwrite") ? params.getBoolean("overwrite") : false;

        return this.downloadUrl(fileUrl, dirName, fileName, overwrite, callbackId);

    } catch (JSONException e) {

        e.printStackTrace();
        return new PluginResult(PluginResult.Status.JSON_EXCEPTION, e.getMessage());

    } catch (InterruptedException e) {
        e.printStackTrace();
        return new PluginResult(PluginResult.Status.ERROR, e.getMessage());
    }

}

private PluginResult downloadUrl(String fileUrl, String dirName, String fileName, Boolean overwrite, String callbackId) throws InterruptedException, JSONException {

    try {

        Log.d("PhoneGapLog", "Downloading "+fileUrl + " into " + dirName + "/" + fileName);

        File dir = new File(dirName);
        if (!dir.exists()) {
            Log.d("PhoneGapLog", "directory " + dirName + " created");
            dir.mkdirs();
        }

        File file = new File(dirName, fileName);

        if (!overwrite && file.exists()) {
            Log.d("DownloaderPlugin", "File already exist");

            JSONObject obj = new JSONObject();
            obj.put("status", 1);
            obj.put("total", 0);
            obj.put("file", fileName);
            obj.put("progress", 100);

            return new PluginResult(PluginResult.Status.OK, obj);
        }

        URL url = new URL(fileUrl);
        HttpURLConnection ucon = (HttpURLConnection) url.openConnection();
        ucon.setRequestMethod("GET");
        ucon.setDoOutput(true);
        ucon.connect();

        Log.d("PhoneGapLog", "Download start");

        InputStream is = ucon.getInputStream();
        byte[] buffer = new byte[1024];
        int readed = 0, 
            progress = 0,
            totalReaded = 0,
            fileSize = ucon.getContentLength();

        FileOutputStream fos = new FileOutputStream(file);

        while ((readed = is.read(buffer)) > 0) {

            fos.write(buffer, 0, readed);
            totalReaded += readed;

            int newProgress = (int) (totalReaded*100/fileSize);             
            if (newProgress != progress)
             progress = informProgress(fileSize, newProgress, fileName, callbackId);

        }

        fos.close();

        Log.d("PhoneGapLog", "Download finished");

        JSONObject obj = new JSONObject();
        obj.put("status", 1);
        obj.put("total", fileSize);
        obj.put("file", fileName);
        obj.put("progress", progress);

        return new PluginResult(PluginResult.Status.OK, obj);

    }
    catch (FileNotFoundException e) {
        Log.d("PhoneGapLog", "File Not Found: " + e);
        return new PluginResult(PluginResult.Status.ERROR, 404);
    }
    catch (IOException e) {
        Log.d("PhoneGapLog", "Error: " + e);
        return new PluginResult(PluginResult.Status.ERROR, e.getMessage());
    }

}

private int informProgress(int fileSize, int progress, String fileName, String callbackId) throws InterruptedException, JSONException {

    JSONObject obj = new JSONObject();
    obj.put("status", 0);
    obj.put("total", fileSize);
    obj.put("file", fileName);
    obj.put("progress", progress);

    PluginResult res = new PluginResult(PluginResult.Status.OK, obj);
    res.setKeepCallback(true);
    success(res, callbackId);

    //Give a chance for the progress to be sent to javascript
    Thread.sleep(100);

    return progress; 
} }

downloader.js

function Downloader() {}

Downloader.prototype.downloadFile = function(fileUrl, params, win, fail) {

//Make params hash optional.
if (!fail) win = params;
PhoneGap.exec(win, fail, "Downloader", "downloadFile", [fileUrl, params]);
};

PhoneGap.addConstructor(function() {
PhoneGap.addPlugin("downloader", new Downloader());
PluginManager.addService("Downloader",        "com.phonegap.plugins.downloader.Downloader");
});

的onClick ="下载()"

function download() {   
window.plugins.downloader.downloadFile("http://farm9.staticflickr.com/8010/7293758472_823d2eef5c_z.jpg", {overwrite: true}, 

      function(res) {
        alert(JSON.stringify(result));
    }, function(error) {
        alert(error);
    }
); }

2 个答案:

答案 0 :(得分:1)

currentURL:您从服务器下载的文件的文件名/完整路径

示例:

onclick="download(myfile.zip)"

function download(fileName) {   
window.plugins.downloader.downloadFile(currentUrl, {overwrite: true}, 

function(res) {
alert(JSON.stringify(result));}, 
function(error) {
alert(error);
}
); }

答案 1 :(得分:0)

你想做这样的事情:

onclick="download(this.src)"

function download(currentUrl) {   
window.plugins.downloader.downloadFile(currentUrl, {overwrite: true}, 

  function(res) {
    alert(JSON.stringify(result));
}, function(error) {
    alert(error);
}
); }