实际参数在哪里通过?

时间:2011-08-27 06:28:05

标签: android cordova

我正在使用android的phonegap工作。我想将我的文件上传到我的服务器。我从这个链接中获得了帮助: - https://github.com/purplecabbage/phonegap-plugins/tree/master/Android/FileUploader

这是我的 fileupload.java 代码:

package com.beetight;

import com.phonegap.*;
import android.os.Bundle;

public class fileupload extends DroidGap {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");
    }
}

这是我的 fileuploader.java 类:

package com.beetight;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import android.net.Uri;
import java.net.URL;
import java.util.Iterator;

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

import android.util.Log;
import android.webkit.CookieManager;

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

/**
* @author matt
*
*/
public class FileUploader extends Plugin {

/* (non-Javadoc)
* @see com.phonegap.api.Plugin#execute(java.lang.String, org.json.JSONArray, java.lang.String)
*/
@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {

try {
String server = args.getString(0);
String file = args.getString(1);
JSONObject params = args.getJSONObject(2);

String fileKey = "file";
String fileName = "image.jpg";
String mimeType = "image/jpeg";
if(args.length() > 3) {
fileKey = args.getString(3);
}
if(args.length() > 4) {
fileName = args.getString(4);
}
if(args.length() > 5) {
mimeType = args.getString(5);
}

if (action.equals("upload")) {
upload(file, server, params, fileKey, fileName, mimeType, callbackId);
} else if (action.equals("uploadByUri")) {
Uri uri = Uri.parse(file);
upload(uri, server, params, fileKey, fileName, mimeType, callbackId);
} else {
return new PluginResult(PluginResult.Status.INVALID_ACTION);
}
PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
r.setKeepCallback(true);
return r;
} catch (JSONException e) {
e.printStackTrace();
return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
}

}

public void upload(Uri uri, String server, JSONObject params, final String fileKey, final String fileName, final String mimeType, String callbackId) {
try {
InputStream fileInputStream=this.ctx.getContentResolver().openInputStream(uri);
upload(fileInputStream, server, params, fileKey, fileName, mimeType, callbackId);
} catch (FileNotFoundException e) {
Log.e("PhoneGapLog", "error: " + e.getMessage(), e);
}
}

public void upload(String filename, String server, JSONObject params, final String fileKey, final String fileName, final String mimeType, String callbackId) {
File uploadFile = new File(filename);
try {
FileInputStream fileInputStream = new FileInputStream(uploadFile);
upload(fileInputStream, server, params, fileKey, fileName, mimeType, callbackId);
} catch (FileNotFoundException e) {
Log.e("PhoneGapLog", "error: " + e.getMessage(), e);
}

}


public void upload(InputStream fileInputStream, String server, JSONObject params, final String fileKey, final String fileName, final String mimeType, final String callbackId) {
try {

String lineEnd = "\r\n";
String td = "--";
String boundary = "*****com.beetight.formBoundary";

URL url = new URL(server);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();

// Get cookies that have been set in our webview
CookieManager cm = CookieManager.getInstance();
String cookie = cm.getCookie(server);

// allow inputs
conn.setDoInput(true);
// allow outputs
conn.setDoOutput(true);
// don't use a cached copy
conn.setUseCaches(false);
// use a post method
conn.setRequestMethod("POST");
// set post headers
conn.setRequestProperty("Connection","Keep-Alive");
conn.setRequestProperty("Content-Type","multipart/form-data;boundary="+boundary);
conn.setRequestProperty("Cookie", cookie);
// open data output stream
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

try {
for (Iterator iter = params.keys(); iter.hasNext();) {
Object key = iter.next();
dos.writeBytes(td + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"" + key + "\"; ");
dos.writeBytes(lineEnd + lineEnd);
dos.writeBytes(params.getString(key.toString()));
dos.writeBytes(lineEnd);
}
} catch (JSONException e) {
Log.e("PhoneGapLog", "error: " + e.getMessage(), e);
}


dos.writeBytes(td + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"" + fileKey + "\";filename=\"" + fileName + "\"" + lineEnd);
dos.writeBytes("Content-Type: " + mimeType + lineEnd);

dos.writeBytes(lineEnd);
// create a buffer of maximum size
int bytesAvailable = fileInputStream.available();
final int total = bytesAvailable;
Log.e("PhoneGapLog", "available: " + bytesAvailable);

int maxBufferSize = 1024;
int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bufferSize];
// read file and write it into form...
int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
int progress = bytesRead;
int send = 0;
while (bytesRead > 0)
{
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
progress += bytesRead;
final int prog = progress;
Log.e("PhoneGapLog", "read " + progress + " of " + total);

// Sending every progress event is overkill
if (send++ % 20 == 0) {
ctx.runOnUiThread(new Runnable () {
public void run() {
try {
JSONObject result = new JSONObject();
result.put("status", FileUploader.Status.PROGRESS);
result.put("progress", prog);
result.put("total", total);
PluginResult progressResult = new PluginResult(PluginResult.Status.OK, result);
progressResult.setKeepCallback(true);
success(progressResult, callbackId);
} catch (JSONException e) {
Log.e("PhoneGapLog", "error: " + e.getMessage(), e);
}
}
});
// Give a chance for the progress to be sent to javascript
Thread.sleep(100);
}
}
// send multipart form data necessary after file data...
dos.writeBytes(lineEnd);
dos.writeBytes(td + boundary + td + lineEnd);

// close streams
fileInputStream.close();
dos.flush();
InputStream is = conn.getInputStream();
int ch;
StringBuffer b =new StringBuffer();
while( ( ch = is.read() ) != -1 ) {
b.append( (char)ch );
}
String s=b.toString();
dos.close();
JSONObject result = new JSONObject();
result.put("status", FileUploader.Status.COMPLETE);

result.put("progress", progress);
result.put("total", total);
result.put("result", s);
PluginResult progressResult = new PluginResult(PluginResult.Status.OK, result);
progressResult.setKeepCallback(true);
success(progressResult, callbackId);

}
catch (MalformedURLException e) {
Log.e("PhoneGapLog", "error: " + e.getMessage(), e);
PluginResult result = new PluginResult(PluginResult.Status.MALFORMED_URL_EXCEPTION, e.getMessage());
error(result, callbackId);
}
catch (FileNotFoundException e) {
Log.e("PhoneGapLog", "error: " + e.getMessage(), e);
PluginResult result = new PluginResult(PluginResult.Status.ERROR, e.getMessage());
error(result, callbackId);
}
catch (IOException e) {
Log.e("PhoneGapLog", "error: " + e.getMessage(), e);
PluginResult result = new PluginResult(PluginResult.Status.IO_EXCEPTION, e.getMessage());
error(result, callbackId);
} catch (InterruptedException e) {
Log.e("PhoneGapLog", "error: " + e.getMessage(), e);
PluginResult result = new PluginResult(PluginResult.Status.ERROR, e.getMessage());
error(result, callbackId);
} catch (JSONException e) {
Log.e("PhoneGapLog", "error: " + e.getMessage(), e);
PluginResult result = new PluginResult(PluginResult.Status.JSON_EXCEPTION, e.getMessage());
error(result, callbackId);
}
}

public enum Status {
PROGRESS,
COMPLETE
}


}

这是我的 index.html

<!DOCTYPE HTML>
<html>
  <head>
    <meta name="viewport" content="width=320; user-scalable=no" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>PhoneGap Demo With JQuery Mobile</title>
      <link rel="stylesheet" href="jquery.mobile/jquery.mobile-1.0b2.css" type="text/css" charset="utf-8" />
      <link rel="stylesheet" href="pgandjqm-style-override.css" type="text/css" charset="utf-8" />
      <script type="text/javascript" src="jquery.mobile/jquery-1.6.2.min"></script>
      <script type="text/javascript" charset="utf-8" src="phonegap-1.0.0.js"></script>
      <script src="jquery.mobile/jquery.mobile-1.0b2.js"></script>
      <script type="text/javascript" charset="utf-8" src="main.js"></script>

    <!-- CDN Respositories: For production, replace lines above with these uncommented minified versions -->
    <!-- <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.css" />-->
    <!-- <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>-->
    <!-- <script src="http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.js"></script>-->
    <script type="text/javascript" charset="utf-8" src="fileuploader.js"></script>
    </head>
  <body>
  <h1>file uploader</h1>
  </body>
</html>

这是我的 fileuploader.js

FileUploader.prototype.uploadByUri = function(server, file, params, fileKey, fileName, mimeType, callback, fail) {

    return PhoneGap.exec(function(args) {
        callback(args);
    }, function(args) {
if(typeof fail == 'function') {
fail(args);
}
    }, 'FileUploader', 'uploadByUri', [server, file, params, fileKey, fileName, mimeType]);
};
FileUploader.prototype.upload = function(server, file, params, fileKey, fileName, mimeType, callback, fail) {

    return PhoneGap.exec(function(args) {
if(typeof callback == 'function') {
callback(args);
}
    }, function(args) {
if(typeof fail == 'function') {
fail(args);
}
    }, 'FileUploader', 'upload', [server, file, params, fileKey, fileName, mimeType]);
};


FileUploader.Status = {
PROGRESS: "PROGRESS",
COMPLETE: "COMPLETE"
}

PhoneGap.addConstructor(function() {
PhoneGap.addPlugin('fileUploader', new FileUploader());
PluginManager.addService("FileUploader","com.beetight.FileUploader");
});

这是我的整个代码..但每当我运行这个项目,那么我什么都不做。我不知道我应该在哪里传递我的服务器名称的实际参数,我要在服务器上上传的文件。所以请建议我如何提供我要在服务器上上传的文件的服务器名称和名称。我对手机编程非常新鲜。     提前告诉你。

1 个答案:

答案 0 :(得分:0)

鉴于您的代码,它需要类似

的内容
var uploader = FileUploader();
uploader.upload("http://yourserver-here.com", //<-- this is where you put your server
        "myfile.txt", //<-- The file you want to upload
        {} , //Not sure what this parameters is for, perhaps adding QS to server path
        "file", //Filekey, using the default from Fileuploader.java
        "myfile.txt", //filename
        "text/plain", //file mime-type
        function(args) {     //callback.
           alert("Callback"); //Not sure if this means success or if you have to check args
        },
        function(args) {     //callback on failure.
           alert("Failed");
        });