2012-06-22 18 views
6

Sto caricando l'immagine in Android. Attualmente il mio codice carica solo il file ma voglio anche inviare alcuni parametri. Sto cercando di seguirecome inviare parametri con file in Android

FileInputStream fileInputStream = new FileInputStream(sourceFile); 
     URL url = new URL(upLoadServerUri); 
     conn = (HttpURLConnection) url.openConnection(); // Open a HTTP connection to the URL 
     conn.setDoInput(true); // Allow Inputs 
     conn.setDoOutput(true); // Allow Outputs 
     conn.setUseCaches(false); // Don't use a Cached Copy 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Connection", "Keep-Alive"); 
     conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
     conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
     conn.setRequestProperty("uploaded_file", fileName); 
     dos = new DataOutputStream(conn.getOutputStream()); 

     dos.writeBytes(twoHyphens + boundary + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ fileName + "\"" + lineEnd); 
     dos.writeBytes(lineEnd); 

     //Sending data 
     dos.writeBytes(twoHyphens + boundary + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd); 
     dos.writeBytes(lineEnd); 
     dos.writeBytes(globalUID); 

e sul lato server sto usando php. ecco come lo sto cercando di ottenere quel parametro

$param = $_POST["paramName"]; 
target_path1 = "./places_photos/" . $param; 

Ma il mio codice attuale non file di caricamento, ma non invia i parametri. Come posso inviare parametri e come posso ottenerli sul lato server?

Aggiornamento

Attualmente, l'immagine viene salvata in places_photos directory di cui si parla in $target_path1 variabile. Quello che voglio è salvare quell'immagine nella directory dell'utente e quella directory è nominata come id utente. Ma sfortunatamente non ricevo userid dal lato server. Come posso inviare userid al server insieme al file?

risposta

0

Ci dovrebbe essere un altro lineEnd aggiunto dopo questa:

dos.writeBytes(twoHyphens + boundary + lineEnd); 
    dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd); 
    dos.writeBytes(lineEnd); 
    dos.writeBytes(globalUID); 
    dos.writeBytes(lineEnd); <-- add this 

Assicurarsi inoltre di aggiungere alla fine del confine multipart (la riga che inizia con '-') Nel tuo caso, aggiungere questo:

dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 
+0

Questo non funziona neanche. Qualche altra soluzione? – 2619

+0

È possibile utilizzare uno strumento come Firebug o Wireshark e tracciare qual è il modulo inviato al server? Il multi-part/form-data è molto schizzinoso sulle nuove linee e il limite è corretto al 100%. – azgolfer

0

Vuoi "rendere" il nome del file php ?? se la tua risposta è sì, quindi puoi apportare alcune modifiche al tuo codice.

(suppongo si è creato un buffer di dimensione massima e leggere il file e scrivere in forma)

primo cambiamento non è necessario inviare questa paramName:

//Sending data 
dos.writeBytes(twoHyphens + boundary + lineEnd); 
dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd); 
dos.writeBytes(lineEnd); 
dos.writeBytes(globalUID); 

basta fare questo:

dos.writeBytes(lineEnd); 
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

e nel tuo php, modificare il codice:

$param = $_POST["paramName"]; 

a

$param = basename($_FILES['uploaded_file']['name']); 

è possibile controllare this articolo

+0

Voglio inviare parametri al server. Il mio php conosce già il nome del file. – 2619

+0

se si desidera inviare un parametro al server, è possibile eseguire una richiesta HTTP POST con HttpClient – yosafatade

0

impostare un cookie con userid in esso. Sul server è possibile recuperare il cookie e controllare userid. (Anche se si noti che questo non è sicuro e non passa il parametro userid)

+0

Ciò che si menziona è un'opzione, ma il requisito di questa app è di inviare parametri al server con il caricamento del file. :( – 2619

0

Il codice è un po 'confuso, ricontrolla le variabili ... ad esempio il tuo target_path1 non ha $ in avanti, controlla se c'è qualche delle altre variabili sever restituiscono qualsiasi output valido.

Se tutto fallisce tuttavia, è possibile rinominare il file caricato - compresi i parametri del nome del file e rinominarlo sul lato server di nuovo dopo l'estrazione dei parametri.

0

questo è molto semplice ...Soluzione operativa al 100%

utilizzare UTF-8 per inviare parametri in url. aggiungere questa riga

// open a URL connection to the Servlet 
       FileInputStream fileInputStream = new FileInputStream(sourceFile); 
       URL url = new URL("http://your fileaddress.php***?yourphpsideparametername="+URLEncoder.encode(yourperameter, "UTF-8")*** ); 

quindi seconda aggiungere questa linea in richiesta di connessione

   conn.setRequestMethod("POST"); 
       ***conn.setRequestProperty("Accept-Charset", "UTF=8");*** 
       conn.setRequestProperty("Connection", "Keep-Alive"); 

aggiungere questa riga sul codice php

$yourperameter =$_GET['yourparameter']; 
    $file_path = "doc/".$yourperameter."/"; 

    $file_path = $file_path . basename($_FILES['uploaded_file']['name']); 
    $title =$_FILES['title']; 
    //$descr=$file_path . basename($_FILES['uploaded_file']['desc']); 

    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { 
     echo "success"; 
    } else{ 
     echo "fail"; 
    } 
Problemi correlati