2010-07-08 7 views
9

Je cherchais une solution à ce problème depuis des heures, mais je n'en trouve pas.Téléchargeur de fichiers Android avec PHP côté serveur

Fondamentalement, je veux télécharger, à partir de mon appareil Android, des fichiers sur un site Web http. Cependant, je n'ai aucune idée de comment faire cela. J'utilise Java sur l'appareil, et je voudrais utiliser PHP sur le côté serveur des choses. Je veux juste télécharger les fichiers, ne pas faire n'importe quoi avec eux sur le serveur.

Quelqu'un peut-il fournir du code et/ou un bon lien vers ce dont j'ai besoin? J'ai peu ou pas d'expérience dans ce domaine, et je suis à court d'idées.

Merci, NS

PS. Je n'ai aucune expérience en codage PHP.

Répondre

11

globale Ouais, donc je trouve la java côté des choses. Cela fonctionne, alors ... oui.

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

J'ai testé ce code, mais je ne peux pas télécharger un fichier de plus de 2 Mo, toute solution pour cela. – PiyushMishra

+0

Malheureusement, ce code ne fonctionne que pour les petits fichiers. Nous avons rencontré ce problème, mais nous n'avions pas besoin de télécharger plus de quelques ko de toute façon, nous l'avons donc rejeté. Nous ne travaillons plus sur ce projet. La façon dont je le vois est soit avec "int bytesAvailable = fileInputStream.available();", où le fIS n'a jamais plus de 2Mo disponibles (peu probable), ou le tampon d'octets: int maxBufferSize = 1000; Octets [] buffer = nouvel octet [bytesAvailable]; Essayez de modifier le paramètre maxBufferSize pour voir ce qui se passe. –

+0

quand vous dites "java-side of things", cela signifie-t-il que ce code est pour une 'application native' ??? .... parce que si oui, alors il n'y aurait pas un problème si l'utilisateur n'a pas l'application ?? ils devraient d'abord le télécharger sur leur appareil Android? ... Merci. – dsdsdsdsd

9

Si vous souhaitez télécharger des fichiers qui est plus grand que 2 Mo vous devez modifier votre PHP Configuraton

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

Par exemple:

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

Cela vous permettra de télécharger des fichiers jusqu'à 10 Mo de taille

+0

Merci pour la clarification! –

Questions connexes