La APP la testeo con Netbeans SDK 3 y he intentado enviar la imagen que capto por medio de la cámara de varias maneras que explico a continuación.
Post + Base64
Post + Multipart
Post + ArrayByteImage
En las tres formas que intente tome ejemplos de la red ya que no domino mucho el tema de Conexiones http.
Cada una de esas formas las he testeado aparte del proyecto osea creando proyectos distintos y han funcionado bien. pero cuando hago la adaptación al proyecto real pasan algunos problemas con el envió de imágenes, resumiendo.
En memoria del celular tengo array de bites de la foto y lo imprimo en consola bites.lenght para darme cuenta del tamaño que toma
cuando este es mayor de 4000 me da el error de
IOException
Persistent connection dropped after first chunk sent, cannot retry
pero cuando es menor la imagen sube al servidor sin problemas, este punto no ocurre cuando ejecuto los ejemplos que tengo aparte, es mas cuando copie una imagen al proyecto que tenia algo menos menos de 800kb, la carga de la imagen lo hice con el método
Código PHP:
getClass().getResourceAsStream(curdir);
Otra cosa el problema de la conexion chunk solo me pasa la primera vez que hago el envio y si el tamaño del byte[] es mayor de 4000 a la siguiente vez envio y ya no salta a la ioExeption osea funciona bien.
intente hacer una jugada volviendo a llamar al metodo que uso para enviar en el catch de la ioexception en el netbeans lo vuelve a llamar pero en el dispositivo móvil se queda muerto no creo que sea el dispositivo movil porque tambien en el netbeans esta fallando.
Ya no se que puede estar mal. :(
Código PHP:
public static boolean uploadImage( String uri, byte[] rawImage)throws Exception
{
InputStream ist = null;
HttpConnection cn = null;
OutputStream out = null;
try{
cn = (HttpConnection)Connector.open( uri );
cn.setRequestMethod( HttpConnection.POST );
// httpCn.setRequestProperty("If-Modified-Since",
// "29 Oct 1999 19:43:31 GMT");
String encoded = Base64.encode( rawImage ).toString();
encoded = Funciones.replace(encoded,"+", "-");
encoded = Funciones.replace(encoded,"/", "_");
String output = "imgdata=" + encoded;
cn.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.1");
cn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
cn.setRequestProperty("Content-Length:", Integer.toString((output.getBytes().length)));
cn.setRequestProperty("Content-Language", "es-ES");
out = new DataOutputStream(cn.openOutputStream());
System.out.println("output : " + output);
out.write( output.getBytes(),0,output.getBytes().length );
// out.close();
buffer = new StringBuffer();
ist = new DataInputStream(cn.openDataInputStream());
int ch = 0;
while ((ch = ist.read()) != -1) {
process((byte)ch);
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
try {
if(ist != null) ist.close();
if(out != null) out.close(); // ERROR chunk connection
if(cn != null) cn.close();
return true;
}catch(IOException ex){
ex.printStackTrace();
return false;
}
}
}
Espero me puedan ayudar, muchas gracias .