Aller au contenu

Uploader une image


Hylobat

Recommended Posts

Bonjour à tous,

Je cherche à développer une appli dont une des fonctionnalité serait d'uploader une image (stockée sur la carte SD) vers un serveur web.

J'ai tenté l'adaptation de plusieurs bouts de code glanés sur le web mais je n'arrive à rien.

Quelqu'un pourrait me donner quelques pistes ou, mieux, un exemple de code ?

D'avance merci,

Hylobat

Lien vers le commentaire
Partager sur d’autres sites

Salut.

Tu parle d'un serveur web http ? ftp ?

Si tu dispose d'un serveur ftp tu peux te créer un client minimal pour envoyer des fichiers, sinon en http tu peux utiliser le POST avec un script PHP qui récupère l'image...

Tu dois même trouver des API ftp ou http qui font ça, mais pour des actions simples faire son propre client est plus efficace sur une machine peu puissante....

Lien vers le commentaire
Partager sur d’autres sites

Mais s'il est plus simple d'utiliser un serveur FTP je veux bien partir là dessus.

C'est surtout à toi de voir en fonction de ton serveur et de ce que tu veux faire de tes images. Par contre, utiliser le protocole HTTP qui utilise le port 80 est peut-etre plus prudent.

En tappant "protocole http post" dans google j'obtiens ça : http://developers.sun.com/mobility/midp/ttips/HTTPPost/...

Utilise un script PHP pour extraire l'image des données contenue dans la variable PHP $POST.

Par contre, si tes images sont grosses, le FTP est peut-être mieux. En quelques commandes tu peux envoyer un fichier:

USER et PASS pour t'authentifier, CWD pour changer de répertoire (par exemple dans img_uploads/), et PASV pour demander le tranfert.

Bon dev.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

Sinon moi j'ai développé ce genre d'application en utilisant une servlet écrite en JAVA.

Comme tu t'en doutes il y a deux parties bien distinctes:

-côté Android :

HttpURLConnection conn = null;
     DataOutputStream dos = 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 = httpUrl; // Tu spécifies ici l'adresse où est situé ta servlet

     try
     {
      //------------------ CLIENT REQUEST

     Log.e("MediaPlayer","Inside Client Request Method");
     FileInputStream fileInputStream = new FileInputStream(new File(FileName) );

      // 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);
      // Write some attributes in the DataoutputStream
      dos = new DataOutputStream( conn.getOutputStream() );

         dos.writeUTF(""+filename); // Avec ça tu peux ajouter en plus de ton image des valeurs dans ton tunnel de sortie, et que tu peux contrôler, ou utiliser côté serveur

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

      // create a buffer of maximum size
      bytesAvailable = fileInputStream.available();
      bufferSize = Math.min(bytesAvailable, maxBufferSize);
      buffer = new byte[bufferSize];

      // read file and write it into form...
      bytesRead = fileInputStream.read(buffer, 0, bufferSize);

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

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

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


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


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

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


     //------------------ read the SERVER RESPONSE


     try {
           inStream = new DataInputStream ( conn.getInputStream() );
           String str;

           while (( str = inStream.readLine()) != null)
           {
                Log.e("MediaPlayer","Server Response"+str);
           }
           inStream.close();

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

-coté serveur ( Servlet Java qui tourne sous tomcat 5.5 )

public class Upload extends HttpServlet {

   private static final Context TAG = null;

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
           throws ServletException, IOException {
           PrintWriter writer = resp.getWriter();    
           writer.println("Hello World !!!");

   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
           throws ServletException, IOException {
       //resp.setContentType("text/html;charset=UTF-8");
       PrintWriter out = resp.getWriter();

       InputStream in = req.getInputStream();
       DataInputStream dis = new DataInputStream(in);
       String filename = dis.readUTF(); // ici tu récupère les valeurs supplémentaires passées dans le tunnel 

       try {                 
       String path = "ton chemin absolu où tu veux écrire ta photo côté serveur";

       System.out.println("LE NOM DE LA PHOTO RECUE EST: " + filename);
       File serverFile = new File(path+filename);
       //File serverFile = File.createTempFile("android", ".jpg");

       FileOutputStream fos = new FileOutputStream(serverFile);        
       byte[] tab = new byte[1024];
       int lu = dis.read(tab);

       while(lu>=0) {
          fos.write(tab, 0, lu);
          lu = dis.read(tab);
       }
       fos.flush();
       fos.close();
       dis.close();
       System.out.println("Le fichier a bien été uploadé !!");
   }
       }
       finally {
             out.close();
           }
   }        
}

Voilà j'espère que ça te sera utile (ou à d'autres ) ;)

Lien vers le commentaire
Partager sur d’autres sites

  • 3 months later...

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...