2012-06-22 6 views
6

Estoy cargando la imagen en android. Actualmente mi código solo carga el archivo, pero también quiero enviar algún parámetro. Estoy intentando seguircómo enviar los parámetros con el archivo en 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); 

y en el lado del servidor estoy usando php. aquí es cómo estoy tratando de obtener ese parámetro

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

Pero mi código actual no carga el archivo pero no envía los parámetros. ¿Cómo puedo enviar parámetros y cómo puedo obtenerlos en el servidor?

actualización

En la actualidad, la imagen se guarda en el directorio de places_photos que se menciona en $target_path1 variable. Lo que quiero es guardar esa imagen en el directorio del usuario y ese directorio se llama ID de usuario. Pero desafortunadamente no estoy recibiendo el ID de usuario en el lado del servidor. ¿Cómo puedo enviar el ID de usuario al servidor junto con el archivo?

Respuesta

0

Debe haber otra lineEnd añade después de esto:

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 

También asegúrese de agregar al final del límite de varias partes (la línea que comienza con '-') En su caso, añadir lo siguiente:

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

Esto no está funcionando bien. ¿Alguna otra solución? – 2619

+0

¿Se puede usar una herramienta como Firebug o Wireshark y rastrear cuál es la publicación del formulario que se envía al servidor? El multi-part/form-data es muy quisquilloso en cuanto a que las nuevas líneas y límites son 100% correctos. – azgolfer

0

¿Quieres "hacer" que el php conozca tu nombre de archivo? si su respuesta es sí, por lo que puede hacer algunos cambios en su código.

(supongo que haya creado un buffer de tamaño máximo y leer el archivo y escribirlo en la forma)

primer cambio que no es necesario esto para enviar paramName:

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

acaba de hacer esto:

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

y en su php, cambie su código:

$param = $_POST["paramName"]; 

a

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

puede comprobar this artículo

+0

Quiero enviar el parámetro al servidor. Mi php ya sabe el nombre del archivo. – 2619

+0

si solo desea enviar un parámetro al servidor, puede ejecutar una solicitud HTTP POST con HttpClient – yosafatade

0

establecer una cookie con el ID de usuario en el mismo. En el servidor puede recuperar la cookie y verificar userid. (Aunque tenga en cuenta que esto no es seguro ni pasa el parámetro userid)

+0

Lo que usted menciona es una opción, pero este requisito de la aplicación es enviar un parámetro al servidor con la carga de archivos. :( – 2619

0

Su código es un poco confuso, verifique sus variables ... por ejemplo, su target_path1 no tiene un $ al frente, verifique si hay alguna de las otras variables de corte devuelve cualquier resultado válido.

Sin embargo, si todo falla, puede cambiar el nombre del archivo que se está cargando, incluidos los parámetros en el nombre del archivo y cambiarle el nombre en el servidor nuevamente después de extraer los parámetros.

0

esto es muy simple ...100% solución de trabajo

usa UTF-8 para enviar el parámetro en url. añadir esta línea

// 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")*** ); 

luego la segunda añada esta línea de solicitud de conexión

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

añadir esta línea de código 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"; 
    } 
Cuestiones relacionadas