Buenas a tod@s
Estoy intentando hacer una pequeña aplicación que suba a Twitxr
imágenes desde mi Blackberry.
Uso el método "postUpdate" y he seguido todo lo que se indica en el
API. Sin embargo, aun no he podido lograr subir ninguna imagen puesto
que obtengo "Could not find your location" como respuesta del
servidor.
El código utilizado es el siguiente:
//**************Abrimos la conexion
String url = "
http://twitxr.com/api/rest/postUpdate";
HttpConnection hcon = (HttpConnection)
Connector.open(url,Connector.READ_WRITE);
//****************Indicamos que el método es POST
hcon.setRequestMethod(HttpConnection.POST);
//**************Indicamos Content-Type multipart para la subida de
imagenes
String boundary = "--------probando";
hcon.setRequestProperty("Content-Type", "multipart/form-data;
boundary=" + boundary);
//***************Formamos la autorizacion, usando el algoritmo md5
para la clave (basado en la implementacion de Paul Johnston:http://
pajhome.org.uk/site/legal.html) y pasando tanto usuario y clave a
Base64 (obtenida de
http://iharder.sourceforge.net/current/java/base64/)
String auth = encriptar(usuario,clave);
hcon.setRequestProperty("Authorization", "Basic " + auth);
/*****Adjuntamos los parámetros necesarios para la subida de imagenes:
las variables "latitude" y "longitude" que representan a las
coordenadas gps se han comprobado en Twitxr que son válidas
*
*El metodo addSimple(boundary,name,data) que se menciona pasará la
informacion con la siguiente estructura:
* --boundary\r\n
* Content-disposition: form-data; name="name"\r\n\r\ndata\r\n
*
*Y el metodo addImage(boundary,name,data,content-type,filename)
formara:
* --boundary\r\n
* Content-disposition: form-data; name="name"; filename="filename"\r\n
* Content-Type: content-type
* \r\n\r\ndata\r\n
*
*/
ByteArrayOutputStream b = new ByteArrayOutputStream();
b.write(addSimple(boundary, "text", texto.getBytes()));
b.write(addSimple(boundary, "latitude", latitude.getBytes()));
b.write(addSimple(boundary, "longitude", longitude.getBytes()));
b.write(addImage(boundary, "image", data, "image/jpeg",
"Nombre.jpg"));
b.write(addSimple(boundary, "source", "PruebaTwitxr".getBytes()));
//*****************Mandamos los datos
DataOutputStream d = = hcon.openDataOutputStream();
d.write(b.toByteArray());
String tmp = "\r\n--" + boundary + "--\r\n";
d.write(tmp.getBytes());
Por ultimo, se recoge la información mandada por el servidor con un
StringBuffer
Observando el código quedaría descartada la posibilidad que dicho
error fuera por no indicar a la conexión que el método debe ser POST
puesto que sí se indica.
Con respecto al Base64, tuve que usarlo puesto que utilizando
únicamente el md5 el servidor me indicaba que no tenía autorización
("Invalid credentials")
Bueno espero poder tener alguna respuesta y mientras seguiré
intentándolo por si hay suerte y doy con el problema :P
Gracias por adelantado.