Jump to content

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

Link to comment
Share on other 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....

Link to comment
Share on other 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.

Link to comment
Share on other 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 ) ;)

Link to comment
Share on other sites

  • 3 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...