2012-06-10 81 views
0

这是我的phonegap和jquery应用程序的下载插件..这个插件正在工作,但我想改变,固定URL(“http://farm9.staticflickr.com/8010/7293758472_823d2eef5c_z.jpg “),以当前URL ..(我要下载从当前URL JPG).thanxPhoneGap下载插件

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); 
    } 
); } 

回答

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); 
} 
); } 
+0

thanx但它不起作用。它showng警报**协议未找到:null ** – tempor

+0

你通过currentUrl传递什么? –

+0

我正在使用Flickr api多数民众赞成,这就是为什么我不能把网址(我需要当我打开一张图片,并单击下载当前图像想下载。有很多拇指图片是在设置)什么是解决方案?? ... .thanx – tempor

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); 
} 
); }