2010-07-08 16 views
9

He estado buscando una solución para esto durante horas, pero no puedo encontrar ninguna.Cargador de archivos Android con php del lado del servidor

Básicamente, quiero cargar, desde mi dispositivo Android, archivos a un sitio web http. Sin embargo, no tengo ni idea de cómo hacer esto. Estoy usando Java en el dispositivo, y me gustaría usar PHP en el lado del servidor de las cosas. Solo quiero subir los archivos, no hacer nada elegante con ellos en el servidor.

¿Alguien puede proporcionar código y/o un buen enlace a lo que necesito? Tengo poca o ninguna experiencia en esto, y estoy perdido.

Gracias, NS

PS. No tengo experiencia en codificación PHP.

Respuesta

11

Sí, así que encontré el lado de Java de las cosas. Esto funciona, entonces ... si.

public class Uploader extends Activity { 

    private String Tag = "UPLOADER"; 
    private String urlString = "YOUR_ONLINE_PHP"; 
    HttpURLConnection conn; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     String exsistingFileName = "/sdcard/uploader/data/testfile"; 

     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     try { 
      // ------------------ CLIENT REQUEST 

      Log.e(Tag, "Inside second Method"); 

      FileInputStream fileInputStream = new FileInputStream(new File(
        exsistingFileName)); 

      // open a URL connection to the Servlet 

      URL url = new URL(urlString); 

      // Open a HTTP connection to the URL 

      conn = (HttpURLConnection) url.openConnection(); 

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

      conn.setRequestProperty("Connection", "Keep-Alive"); 

      conn.setRequestProperty("Content-Type", 
        "multipart/form-data;boundary=" + boundary); 

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

      dos.writeBytes(twoHyphens + boundary + lineEnd); 
      dos 
        .writeBytes("Content-Disposition: post-data; name=uploadedfile;filename=" 
          + exsistingFileName + "" + lineEnd); 
      dos.writeBytes(lineEnd); 

      Log.e(Tag, "Headers are written"); 

      // create a buffer of maximum size 

      int bytesAvailable = fileInputStream.available(); 
      int maxBufferSize = 1000; 
      // int bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      byte[] buffer = new byte[bytesAvailable]; 

      // read file and write it into form... 

      int bytesRead = fileInputStream.read(buffer, 0, bytesAvailable); 

      while (bytesRead > 0) { 
       dos.write(buffer, 0, bytesAvailable); 
       bytesAvailable = fileInputStream.available(); 
       bytesAvailable = Math.min(bytesAvailable, maxBufferSize); 
       bytesRead = fileInputStream.read(buffer, 0, bytesAvailable); 
      } 

      // send multipart form data necesssary after file data... 

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

      // close streams 
      Log.e(Tag, "File is written"); 
      fileInputStream.close(); 
      dos.flush(); 
      dos.close(); 

     } catch (MalformedURLException ex) { 
      Log.e(Tag, "error: " + ex.getMessage(), ex); 
     } 

     catch (IOException ioe) { 
      Log.e(Tag, "error: " + ioe.getMessage(), ioe); 
     } 

     try { 
      BufferedReader rd = new BufferedReader(new InputStreamReader(conn 
        .getInputStream())); 
      String line; 
      while ((line = rd.readLine()) != null) { 
       Log.e("Dialoge Box", "Message: " + line); 
      } 
      rd.close(); 

     } catch (IOException ioex) { 
      Log.e("MediaPlayer", "error: " + ioex.getMessage(), ioex); 
     } 
    } 
} 
+1

He probado este código pero no puedo cargar un archivo de más de 2MB, ninguna solución para eso. – PiyushMishra

+0

Lamentablemente, este código solo funciona para archivos pequeños. Nos encontramos con ese problema, pero no tuvimos que subir más de unos kB de todos modos, así que lo descartamos. Ya no estamos trabajando en ese proyecto. La forma en que lo veo es con "int bytesAvailable = fileInputStream.available();", donde el fIS nunca tiene más de 2 MB disponibles (improbable) o el búfer de bytes: int maxBufferSize = 1000; byte [] buffer = new byte [bytesDisponible]; Intenta cambiar maxBufferSize para ver qué pasa. –

+0

cuando dices "java-side of things", ¿eso significa que este código es para una "aplicación nativa"? .... porque de ser así, ¿no habría un problema si el usuario no tiene la aplicación? tendrían que descargarlo en su dispositivo Android primero? ... Gracias. – dsdsdsdsd

9

Si desea cargar los archivos que es mayor que 2 MB necesita editar su PHP Configuracion

; Maximum allowed size for uploaded files. 
; http://php.net/upload-max-filesize 
upload_max_filesize = 2M 

Ej:

; Maximum allowed size for uploaded files. 
; http://php.net/upload-max-filesize 
upload_max_filesize = 10M 

Eso le permitirá subir archivos de hasta 10MB de tamaño

+0

¡Gracias por la aclaración! –

Cuestiones relacionadas