Hylobat Posté(e) 15 avril 2010 Share Posté(e) 15 avril 2010 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
camslecams Posté(e) 15 avril 2010 Share Posté(e) 15 avril 2010 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.... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hylobat Posté(e) 15 avril 2010 Auteur Share Posté(e) 15 avril 2010 Je parle d'un serveur HTTP. Mais s'il est plus simple d'utiliser un serveur FTP je veux bien partir là dessus. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
camslecams Posté(e) 19 avril 2010 Share Posté(e) 19 avril 2010 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
dorian73 Posté(e) 19 avril 2010 Share Posté(e) 19 avril 2010 ou sinon via des socket .... mais faut faire une partie serveur , parcontre , la rapidité est au rendez vous ! il me faut 1 seconde pour envoyer une photo sur un serveur .... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 29 avril 2010 Share Posté(e) 29 avril 2010 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 ) ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Gr3gzz Posté(e) 10 août 2010 Share Posté(e) 10 août 2010 Les filemanager gère très bien les ftp... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.