2010-07-08 15 views
9

Ho cercato una soluzione a questo per ore, ma non riesco a trovarne.File uploader Android con php lato server

Fondamentalmente, voglio caricare, dal mio dispositivo Android, i file su un sito Web http. Tuttavia, non ho idea di come farlo. Sto usando java sul dispositivo e mi piacerebbe usare PHP sul lato server delle cose. Voglio solo caricare i file, non fare niente di speciale con loro sul server.

Qualcuno può fornire codice e/o un buon collegamento a ciò di cui ho bisogno? Ho poca o nessuna esperienza in questo, e sono in perdita.

Grazie, NS

PS. Non ho esperienza nella codifica di PHP.

risposta

11

Sì, così ho trovato il java-lato delle cose. Funziona, quindi ... sì.

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

Ho testato questo codice ma non riesco a caricare un file più di 2 MB, qualsiasi soluzione per questo. – PiyushMishra

+0

Purtroppo questo codice funziona solo per file di piccole dimensioni. Ci siamo imbattuti in questo problema, ma non abbiamo comunque dovuto caricare più di qualche kB, quindi l'abbiamo respinto. Non lavoriamo più su quel progetto. Il modo in cui lo vedo è con "int bytesAvailable = fileInputStream.available();", dove il fIS non ha mai più di 2 MB disponibili (improbabile) o il buffer di byte: int maxBufferSize = 1000; byte [] buffer = new byte [bytesAvailable]; Prova a cambiare il maxBufferSize per vedere cosa succede. –

+0

quando dici "java-side of things", vuol dire che questo codice è per una 'app nativa' ??? .... perché se è così, allora non ci sarebbe un problema se l'utente non ha l'app ?? dovrebbero prima scaricarlo sul proprio dispositivo Android ?? ... Grazie. – dsdsdsdsd

9

Se si desidera caricare file di dimensioni superiori a 2 MB è necessario modificare il PHP configuraton

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

Esempio:

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

che permetterebbe di caricare file fino a 10 MB di dimensione

+0

Grazie per il chiarimento! –