Text File Upload per HTTP Post

GMoN

GMoN

Dauergast
394
Ich habe ein Problem, bei dem ich jetzt nicht mehr weiter komme. Und zwar möchte ich in meiner App einen Text Datei Upload auf einen Web Server anbieten.

Die .php erzeugt fplgendes HTML Form:
Code:
<html>
<body>
<form enctype="multipart/form-data" action="#" method="post">
	<input type="file" name="uploadfile" size="84" /><br />
	Username: <input name="username" type="text" size="30" maxlength="30" value="" /><br />
	Password: <input name="password" type="password" size="20" maxlength="20" /><br />
	<input type="checkbox" name="test" value="test" />Testen (Nicht in die Datenbank)<br />
	<input type="submit" value="Upload" />
</form>
</body>
</html>

Jetzt habe ich viel gesucht im Web und habe folgenden asynchronen Task gebastelt:
Code:
private void upload() {
 new AsyncTask<String,Void, int[]>(){
  int[] alt;
  @Override
   protected int[] doInBackground(String... urlStr){
    StringBuffer htmlCode = new StringBuffer();
    File file = new File(Environment.getExternalStorageDirectory() + "/test/" + "test.txt");
    try{
     alt=null;
     HttpClient httpclient = new DefaultHttpClient();
     HttpPost httppost = new HttpPost("https://www.test.com/upload.php");
     try {
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
      nameValuePairs.add(new BasicNameValuePair("file", file));
      nameValuePairs.add(new BasicNameValuePair("username", "testbunny"));
      nameValuePairs.add(new BasicNameValuePair("password", "12345"));
      nameValuePairs.add(new BasicNameValuePair("test", "test"));
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
      HttpResponse response =httpclient.execute(httppost);
      Log.d(TAG, inputStreamToString(response.getEntity().getContent()).toString());
      } catch (ClientProtocolException e) {
	    			         // TODO Auto-generated catch block
      } catch (IOException e) {
	    			         // TODO Auto-generated catch block
      }
	    
      } catch (Exception e) {
       e.printStackTrace();
      }
     return alt;
    }         
   @Override
    protected void onPostExecute(int[] alt){
   }
  }.execute("http://www.google.com");

Damit kann ich den Server ansprechen und er reagiert auf das Passwort und den Usernamen und gibt entsprechende Rückmeldung. Leider wird keine Datei hochgeladen. Auch diese Test Checkbox wird scheinbar nicht übertragen. Wie macht man das richtig?
 
Ich verstehe nicht was das für ein php file mit html form oben sein soll? Oder ist das dasselbe in html was deine app auch machen soll?
Ohne den Javacode jetzt angeguckt zu haben würde ich gerne dein Empfangsphp upload.php sehen zu dem du postest.
Vielleicht verstehe ich auch nur falsch ...

Und dieses Basicnamevaluepair mit file wird wohl keine datei hochladen sondern nur file.toString oder?

Gesendet von meinem SK17i mit der Android-Hilfe.de App
 
Zuletzt bearbeitet:
miha schrieb:
Ich verstehe nicht was das für ein php file mit html form oben sein soll? Oder ist das dasselbe in html was deine app auch machen soll?

Ja, diese upload.php auf dem Server, der nicht mir gehört, erzeugt dieses html Formular, in welchem man Username und passwort eingeben kann, sowie eine Datei auswählen und hochladen kann. Und man kann mit deser Checkbox auswählen, ob das nur ein Test sein soll oder ob die Datei wirklich aus dem Server gespeichert werden soll.

Die Eingaben und das Text File soll aus meiner App hochgeladen werden.
 
Ich würde es erstmal mit einem eigenen Server machen bis das geht mit eigenem Empfangsphp für die Daten.
Das Problem wird aber der Dateipost sein den du nicht machst. Du lädst einfach nur ein paar Strings hoch und kein multipart mit dem Dateiinhalt.

Gesendet von meinem SK17i mit der Android-Hilfe.de App
 
Ich habe leider keinerlei Ahnung von php Servern Multipart usw.

Multipart geht wohl nicht mit Android SDK Mitteln, also habe ich apache Libaries importiert

Code:
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;

Und die Upload function und so abgeändert.

Code:
private void upload2(){
			  final ProgressDialog dialog2 = new ProgressDialog(gmon.this);

		        
		        
			new AsyncTask<Void, Void, Boolean>() {
				protected void onPreExecute() {
		            dialog2.setMessage("Uploading file");
		            dialog2.setCancelable(false);
		            dialog2.show();
				}

		        @Override
		        protected Boolean doInBackground(Void... arg0) {
		        	 Log.v(TAG, "hier");
		            try {
		                HttpClient httpClient = new DefaultHttpClient();
		                HttpPost postRequest = new HttpPost("http://www.server.com/upload.php");
		                MultipartEntity reqEntity = new MultipartEntity(
		                        HttpMultipartMode.BROWSER_COMPATIBLE);

		                reqEntity.addPart("username", new StringBody("testbunny"));
		                try {
		                    File f = new File(Environment.getExternalStorageDirectory(), "/gmon/gmon_wlan.txt");

		                    FileBody body = new FileBody(f);
		                    reqEntity.addPart("uploadfile", body);

		                } catch (Exception e) {
		                    reqEntity.addPart("uploadfile", new StringBody(""));
		                }

		                reqEntity.addPart("password", new StringBody("12345"));

		                postRequest.setEntity(reqEntity);
		                HttpResponse response = httpClient.execute(postRequest);

		                BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
		                String sResponse; StringBuilder s = new StringBuilder(); 
		                while ((sResponse = reader.readLine()) != null) { 
		                    s = s.append(sResponse); 
		                } 
		                Log.v("Response for POst", s.toString());
		                return true;
		            } catch (Exception e) {
		                Log.e("f", "Error :: " + e);
		            }
		            return false;
		        }

		        @Override
		        protected void onPostExecute(Boolean result) {
		            if (dialog2.isShowing()) {
		                dialog2.dismiss();
		            }
		            if (result) {
		                Toast.makeText(gmon.this,
		                        "File uploaded successfully", Toast.LENGTH_LONG)
		                        .show();

		            } else {
		                Toast.makeText(gmon.this, "Your Request not complete",
		                        Toast.LENGTH_LONG).show();
		            }
		        }
		    }.execute();
		 }

Die Datei wird zwar vom Handy ins Internet hochgeladen aber auf dem Server kommt sie nicht an. Der Progress dialog läuft ne weile bei einem 2.5 MB file aber als Response bekomme ich nur die HTML Form aus der php von oben. Der Server reagiert hier scheinbar nicht mal auf user und password. Eine exception tritt aber auch nicht auf.
 

Ähnliche Themen

B
Antworten
6
Aufrufe
1.051
jogimuc
J
D
  • DasDannychen
Antworten
7
Aufrufe
732
rene3006
R
M
  • myoggradio
Antworten
1
Aufrufe
779
myoggradio
M
Zurück
Oben Unten