Velocidad de envío de imágenes

Nihon

Hola compañeros:

Si me habéis visto antes por aquí sabréis que trabajo desarrollando una aplicación móvil para android donde (entre otras cosas) los usuarios envían imágenes al servidor de mi empresa... y si no lo sabíais, pues ya lo sabéis.

El caso es que desde que empecé he utilizado siempre una conexión FTP para envíar las fotos desde el móvil al servidor. A mí siempre me ha parecido muy cómodo y sencillo ya que a la vez que autentifico al usuario del móvil, accedo al servidor de una manera muy fácil para guardar las fotos donde corresponde moviéndome a través de la propia conexión.

Ahora bien, hoy me han comentado que la velocidad de transmisión resulta desesperante para varios usuarios y aunque no entienden que no es lo mismo una conexión 3G de móvil que una conexión por cable FTP desde un ordenador, entiendo que no les falta razón ya que no he probado otras maneras de envíar imágenes.

Me han puesto como ejemplo whatsapp, pero claro yo soy un simple ingeniero que lleva apenas un año con android. En fin, mi pregunta sería la siguiente. ¿cómo sería más rápido envíar imágenes a través de una aplicación propia en android? ¿Un servicio web mejoraría mucho la velocidad en comparación con una conexión FTP? ¿Se puede "contratar" un servicio o licencia de una empresa externa que se dedique a estos temas?

Adjunto mi código de subida de imágenes en caso de haber algo que se pueda mejorar o dudas de como trabajo:

FTPClient ftpClient = new FTPClient();
	 		 
// Facilitamos la dirección del host al que vamos a subir nuestros archivos

ftpClient.connect("XX.XX.XX.XX");
	 			
SharedPreferences sp = getApplicationContext().getSharedPreferences("usuario", 0);

String nombreusuario = sp.getString("Usuario", "");
String passusuario = sp.getString("Password", "");
	 	    	
//Indicamos el usuario y contraseña del servidor, necesario para acceder
	 	    	
if(ftpClient.login(nombreusuario, passusuario))
{	 			
	 ftpClient.enterLocalPassiveMode();
	 ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
	 ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
	 				
 ftpClient.changeWorkingDirectory("/ID "+parte.getID()+"/IMAGENES/REPARACION/INICIO");
 				
//Recorremos el array de imágenes asociado a un parte

 for(int x = 0; x<parte.Fotos.getNumFotosInicio();x++)
 {	
	 File file = new File(parte.Fotos.getFotosInicio(x));
	 				
	 if(file.exists() && file.length()>0)
	 {
	 	BufferedInputStream buffI = new BufferedInputStream(new FileInputStream(parte.Fotos.getFotosInicio(x)));
	 					ftpClient.storeFile("Inicio"+parte.getIdentidad()+"_"+String.valueOf(x)+".jpg", buffI);
 	        buffI.close();
	 }
	 				
	 progreso = progreso + (100/parte.Fotos.getNumFotosInicio());
	 publishProgress(progreso);
 }
}

Como siempre, gracias de antemano.

erdanblo

Una pequeña cosa, no te puede ayudar con tu problema, pero ¿sabes que por FTP mandas en texto plano el usuario / contraseña del FTP? Además la comunicación no es cifrada.

Te lo comento, por si es algo importante para tí, que te plantees el cambio de protocolo.

1 respuesta
Nihon

#2 Si, entiendo que la seguridad del FTP a pelo no es lo mejor del mundo, pero realmente no me es un problema. Un mejor envío de las imágenes es lo importante ahora.

Gracias por el aviso.

1 respuesta
B

#3 Partiendo de la base de que usar ftp para el upload de imágenes es una muy mala idea, pueden ser mil cosas, servidor ftp limitando conexiones y poniendo en cola algunas, servidor ftp saturado, imagen muy grande y conexión del cliente desastrosa, etc.. Yo te recomendaría que intentaras reproducir el error tu mismo en un entorno lo más parecido posible al cliente con problemas y en base a eso sacas soluciones.
Si te vale de algo yo enviaría la imagen como un string en base64 a un webservice.

B

Pues parece que whatsapp también envía las imágenes como string en base 64:

https://github.com/tgalal/OpenWhatsappBB10/blob/master/src/wazcades/src.py/waxmpp.py#L760

Usuarios habituales