¿Se ha enviado al servidor el contenido-longitud no válido?
Estoy tratando de subir una foto al popular servicio Dailybooth a través de su nueva API a través del método documentado aquí .
El problema es que el servidor está respondiendo con:
- Comportamiento extraño al descargar html usando HttpURLConnection
- Compruebe si la actividad se ha iniciado en el servicio
- Android Eclipse ¿Cómo puedo guardar renderizado GLsurfaceView como * .png image
- NullPointerException en FragmentManager
- Edittext se centran en el inicio y evitan el empuje del diseño
<html><head><title>411 Length Required</title>...
El código que estoy usando para enviar estos datos está aquí:
// 2: Build request HttpClient httpclient = new DefaultHttpClient(); SharedPreferences settings = DailyboothShared.getPrefs(DailyboothTakePhoto.this); String oauth_token = settings.getString("oauth_token", ""); HttpPost httppost = new HttpPost( "https://api.dailybooth.com/v1/pictures.json?oauth_token=" + oauth_token); Log.d("upload", "Facebook: " + facebook); Log.d("upload", "Twitter: " + twitter); try { InputStream f = getContentResolver().openInputStream(snap_url); MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); entity.addPart("picture", new InputStreamBody(f, snap_url.getLastPathSegment())); entity.addPart("blurb", new StringBody(blurb)); entity.addPart("publish_to[facebook]", new StringBody(facebook)); entity.addPart("publish_to[twiter]", new StringBody(twitter)); httppost.setEntity(entity); HttpResponse response = httpclient.execute(httppost); Log.d("upload", response.toString()); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 200) { // do something? } else { Log.d("upload", "Something went wrong :/"); } Log.d("upload", EntityUtils.toString(response.getEntity())); } catch (Exception ex) { ex.printStackTrace(); }
No tengo ni idea de lo que estoy haciendo mal.
- Obtener el ancho y la altura de una fila en RecycleView - Android
- Anular la funcionalidad del botón de retroceso del hardware de Android
- Después de la actualización de Google Play Service a la versión 13, recibí un error
- Agregar oyentes diferentes para texto en TextView
- OpenCV para Android - NativeCameraView todavía existe?
- El tamaño del anuncio y el ID de la unidad de anuncio deben configurarse antes de loadAd cuando se establezca mediante programación
- Encabezados ListView de Android
- Eliminar imagen en miniatura de la galería cuando se ocultó
Está utilizando clases StringBody
y InputStreamBody
que describen el contenido de su MultipartEntity. Mirando las fuentes, StringBody.getContentLength()
devuelve la longitud de la cadena, pero InputStreamBody
siempre devuelve -1
, y supongo que esto se hace para el caso de que necesites subir algunos datos al servidor sin saber el tamaño de la misma, y empiece a cargar mientras los datos lleguen al flujo.
Si desea poder configurar la longitud del contenido, entonces necesita saber el tamaño de su flujo de antemano, lo que puede hacer si ese es el caso es configurar el InputStreamBody
esa manera:
new InputStreamBody(f, snap_url.getLastPathSegment()) { public long getContentLength() { return /*your length*/; } }
o volcar su flujo en una matriz de byte[]
y pasar ByteArrayInputStream
a la InputStreamBody
, por supuesto, haciendo que pierda la capacidad de streaming, ya que necesita para almacenar en caché sus datos en la memoria antes de enviarlo más …
Como usted dijo que está trabajando en las imágenes, son estas imágenes de File
por casualidad? Si es así también tiene FileBody
que devuelven el content-length
correcto content-length
.
- ¿Cómo obtengo el ID de fila de la fila de un ListView, que contiene un elemento que se puede hacer clic?
- Android – Google Talk Intents