Tengo problemas para cargar imágenes en Android.Android archivo httpclient cargar problemas de corrupción y tiempo de espera
estoy usando Apache httpmime 4.1 lib el código es así:
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("image", new FileBody(new File(AndorraApplication.getPhotosPath() + "/" + entity.getFileName()), "image/jpeg"));
resp = NetworkUtils.sendHttpRequestMultipart(EXPORT_PHOTOS_URI, reqEntity);
clase NetworkUtils:
public class NetworkUtils {
public static final int REGISTRATION_TIMEOUT = 3 * 1000;
public static final int WAIT_TIMEOUT = 5 * 1000;
public static HttpResponse sendHttpRequestMultipart(String uri, MultipartEntity entity) {
HttpClient mHttpClient = new DefaultHttpClient();
final HttpParams params = mHttpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, REGISTRATION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);
ConnManagerParams.setTimeout(params, WAIT_TIMEOUT);
HttpPost post = new HttpPost(uri);
post.addHeader(entity.getContentType());
post.setEntity(entity);
HttpResponse resp = mHttpClient.execute(post);
}
}
veces todo funciona bien, pero a veces (sobre todo en una conexión lenta) la imagen está cargada muy corrupta. el ejemplo está aquí: http://pixelbirthcloud.com/574_orig.jpg
no arroja ninguna excepción. la longitud del archivo cargado es el mismo que el original ... intentado cambiar el tipo de mime a application/octet-stream o eliminarlo en absoluto. intenta jugar con tiempos de espera. aún el mismo resultado. los usuarios finales subieron imágenes corruptas casi todo el tiempo (aunque logré obtener imágenes bronem solo 2 veces) ... el tamaño de la imagen fue de 2.5 megas al principio, pero luego lo reduje a 500-700 kb. no solucionó el problema sin embargo.
no han intentado cambiar la biblioteca de apache ... tal vez sea el problema ... pero por lo que he leído en la red, nadie estaba experimentando esto con la biblioteca httpmime.
¿qué puede ser? estoy completamente perdido ahora :(
la otra cuestión es que los tiempos de espera a veces no funciona
como cuando se trata de esta línea:. HttpResponse resp = mHttpClient.execute (post); y desactivo 3g conexión que sólo espera para como 17-20 minutos en lugar de 3 o 5 segundos .. y sólo entonces se lanza una excepción intentado diferentes métodos como esto:..
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpProtocolParams.setUseExpectContinue(params, false);
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
ConnManagerParams.setMaxTotalConnections(params, 5);
ConnManagerParams.setTimeout(params, 30000);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https",PlainSocketFactory.getSocketFactory(), 80));
ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
HttpClient httpclient = new DefaultHttpClient(manager, params);
pero aún no funciona :)
El script en línea que aparecerá debe tener el código para leer el archivo y guardarlo en la base de datos. – Javanator
puede terminar haciendo algo como esto, supongo ... aunque no contestó la pregunta, pero gracias. Vi esa solución en la red antes, pero decidió ir de una manera más conveniente - usando httpcomponents ... pero falló por alguna razón :( – Alex
es una clase completa solo necesitamos pasar la url de archivo y la url de script. ¿Qué sería más conveniente entonces? esta – Javanator