2010-08-06 5 views
0

Je veux copier tous les fichiers vidéo sur mon serveur & enregistrer dans le dossier de contenu Web d'un service Web, de sorte qu'il puisse être visible à tous plus tard!Vous travaillez avec le service Web?

Comment devrais-je procéder?

Répondre

1

Fondamentalement, vous avez besoin de deux côtés. Le premier est sur Android. Vous devez envoyer (faire dans un ASyncTask e.x.) les données à votre service web. Ici, je fait une petite méthode pour vous, qui envoie un fichier et certaines valeurs POST supplémentaires à une URL:

private boolean handleFile(String filePath, String mimeType) {  
    HttpURLConnection connection = null; 
    DataOutputStream outStream = null; 
    DataInputStream inStream = null; 

    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 

    int bytesRead, bytesAvailable, bufferSize; 

    byte[] buffer; 

    int maxBufferSize = 1*1024*1024; 

    String urlString = "http://your.domain.com/webservice.php"; 

    try { 
     FileInputStream fileInputStream = null; 
     try { 
      fileInputStream = new FileInputStream(new File(filePath)); 
     } catch(FileNotFoundException e) { } 
     URL url = new URL(urlString); 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 
     connection.setUseCaches(false); 

     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Connection", "Keep-Alive"); 
     connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);    

     outStream = new DataOutputStream(connection.getOutputStream()); 

     // Some POST values 
     outStream.writeBytes(addParam("additional_param", "some value"); 
     outStream.writeBytes(addParam("additional_param 2", "some other value");    

     // The file with the name "uploadedfile" 
     outStream.writeBytes(twoHyphens + boundary + lineEnd); 
     outStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + filePath +"\"" + lineEnd + "Content-Type: " + mimeType + lineEnd + "Content-Transfer-Encoding: binary" + lineEnd);   
     outStream.writeBytes(lineEnd); 

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

     bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

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

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

     fileInputStream.close(); 
     outStream.flush(); 
     outStream.close(); 
    } catch (MalformedURLException e) { 
     Log.e("APP", "MalformedURLException while sending\n" + e.getMessage()); 
    } catch (IOException e) { 
     Log.e("APP", "IOException while sending\n" + e.getMessage()); 
    } 


    // This part checks the response of the server. If its "UPLOAD OK" the method returns true 
    try { 
     inStream = new DataInputStream(connection.getInputStream()); 
     String str; 

     while ((str = inStream.readLine()) != null) { 
      if(str=="UPLOAD OK") { 
       return true; 
      } else { 
       return false; 
      } 
     } 
     inStream.close(); 
    } catch (IOException e){ 
     Log.e("APP", "IOException while sending\n" + e.getMessage()); 
    } 
    return false; 
} 

Maintenant, nous avons l'autre côté: http://your.domain.com/webservice.php Votre serveur. Il a besoin d'une logique, par exemple en PHP, pour gérer la requête POST envoyée. Quelque chose comme ça fonctionnerait:

<?php 
    $target_path = "videos/";  

    $target_path = $target_path.'somename.3gp'; 
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
     exit("UPLOAD OK"); 
    } else { 
     exit("UPLOAD NOT OK"); 
    } 
?> 
+0

Hey merci une tonne! C'est très bien de me donner un coup de pied.Je vais travailler avec elle et si obtenir des problèmes entreront en contact à nouveau – NickHalden

+0

Merci, et pas de problème :) La chose avec le ASyncTask est important. Imaginez, vous avez un fichier 5MiB à télécharger et l'utilisateur est coincé sur cet écran et rien ne se passe, même pas d'icône de chargement ou plus. –

Questions connexes