2011-04-26 25 views
5

Mi código para cargar la imagen al servidor es: ImagenAndroid: ¿Cómo subir archivo .mp3 e imagen al servidor http?

String userIdParameter = String.valueOf(userId); 
    String fileName = "temporary_holder.jpg"; 
    HttpURLConnection conn = null; 
    DataOutputStream dos = null; 

    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 
    int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 

    String sourceFileUri = HomeScreen.get_path(); 
    String upLoadServerUri = "http://10.120.10.87:8080/WebImage/UploadImage"; 

    File sourceFile = new File(sourceFileUri); 
    if (!sourceFile.isFile()) { 
     Log.e("Huzza", "Source File Does not exist"); 
     return; 
    } 
    int serverResponseCode = 0; 
    try { 

     // open a URL connection to the Servlet 
     FileInputStream fileInputStream = new FileInputStream(sourceFile); 

     // ------------------ CLIENT REQUEST 
     URL url = new URL(upLoadServerUri); 

     // Open a HTTP connection to the URL 
     conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoInput(true); // Allow Inputs 
     conn.setDoOutput(true); // Allow Outputs 
     conn.setUseCaches(false); // Don't use a Cached Copy 

     // Use a post method. 
     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("file_name", fileName); 
     conn.setRequestProperty("file_name_audio", fileName); 
     conn.setRequestProperty("X-myapp-param1", userIdParameter); 

     // conn.setFixedLengthStreamingMode(1024); 
     // conn.setChunkedStreamingMode(1); 

     dos = new DataOutputStream(conn.getOutputStream()); 

     dos.writeBytes(twoHyphens + boundary + lineEnd); 

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

     dos.writeBytes(lineEnd); 


      // create a buffer of maximum size 
     bytesAvailable = fileInputStream.available(); 

     int streamSize = (int) sourceFile.length(); 
     bufferSize = streamSize/10; 

     System.out.println("streamSize" + streamSize); 

     buffer = new byte[streamSize]; 

     // read file and write it into form... 
     bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
     int count = 0; 
     while (bytesRead > 0) { 
     progress = (int) (count); 
     displayNotification(); 
     Thread.sleep(500); 

     dos.write(buffer, 0, bufferSize); 
     bytesAvailable = fileInputStream.available(); 
     // bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
     count += 10; 

     } 

     // send multipart form data necesssary after file data... 
     dos.writeBytes(lineEnd); 
     dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

     // Responses from the server (code and message) 
     serverResponseCode = conn.getResponseCode(); 
     String serverResponseMessage = conn.getResponseMessage(); 

     System.out.println("Upload file to serverHTTP Response is : " 
      + serverResponseMessage + ": " + serverResponseCode); 
     // close streams 
     System.out.println("Upload file to server" + fileName 
      + " File is written"); 
     fileInputStream.close(); 
     dos.flush(); 
     dos.close(); 
    } catch (MalformedURLException ex) { 
     ex.printStackTrace(); 
     Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    // this block will give the response of upload link 
    try { 
     BufferedReader rd = new BufferedReader(new InputStreamReader(
      conn.getInputStream())); 
     String line; 
     while ((line = rd.readLine()) != null) { 
     System.out.println("RESULT Message: " + line); 
     } 
     rd.close(); 
    } catch (IOException ioex) { 
     Log.e("Huzza", "error: " + ioex.getMessage(), ioex); 
    } 
    return; // like 200 (Ok) 

Cargar archivos en el servidor funciona bien .. necesito subir tanto archivos MP3 e imagen Ayuda a la server..Please

+0

Hola, jennifer, tengo un gran problema. ¿Cómo pasaste los parámetros de imagen que se subirán? – amity

+0

Compruebe [este] (http://stackoverflow.com/questions/4966910/androidhow-to-upload-mp3-file-to-http-server) – Grook

+0

de esta manera es cargar un archivo mp3 .. necesito subir tanto mp3 como una imagen ... carga 2 archivos ... quiero saber cómo preparar el formulario para subir 2 archivos – jennifer

Respuesta

4

lo tanto, desea para enviar múltiples archivos en una solicitud HTTP? Nunca he hecho esto por mí mismo, pero de acuerdo con la RFC, basta con añadir otro cuerpo al mensaje en el que se envía el audio, debería ser algo como esto:

dos = new DataOutputStream(conn.getOutputStream()); 
    dos.writeBytes(twoHyphens + boundary + lineEnd); 
    dos.writeBytes("Content-Disposition: form-data; name=\"file_name\";filename=\"" 
     + fileName + "\"" + lineEnd); 
    dos.writeBytes(lineEnd); 
    // Code for sending the image.... 
    dos.writeBytes(lineEnd); 


    dos.writeBytes(twoHyphens + boundary + lineEnd); 
    dos.writeBytes("Content-Disposition: form-data; name=\"file_name_audio\";filename=\"" 
     + fileNameAudio + "\"" + lineEnd); 
    dos.writeBytes(lineEnd); 
    // Code for sending the MP3 
    dos.writeBytes(lineEnd); 
    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

Asegúrese de que los nombres de las dos partes son diferentes (dependiendo del software del servidor).

+0

@stephan: ¿y si quiero pasar el valor de Strings con esta multiparte como el video y el archivo de audio con el nombre de usuario? y su ID con el nombre "user_name" y "user_id". Y este user_id y user_name son cadenas. –

Cuestiones relacionadas