Android httpclient de téléchargement de fichiers de données de la corruption et des problèmes de délai d'attente

je vais avoir des problèmes avec le téléchargement des images dans android.

je suis en utilisant apache httpmime 4.1 lib
le code ressemble à ceci:

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);

NetworkUtils classe:

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);
    }
}

parfois tout fonctionne bien, mais parfois (surtout sur une connexion lente) l'image est téléchargée très endommagé. l'exemple est ici: http://pixelbirthcloud.com/574_orig.jpg

il ne jette pas des exceptions. la longueur du fichier téléchargé est le même que l'original.. essayé de changer le type mime application/octet-stream ou de le supprimer à tout. essaie de jouer avec des délais d'attente. toujours le même résultat. utilisateurs finaux de télécharger des images corrompues presque tout le temps (bien que j'ai réussi à obtenir bronem images seulement 2 fois seulement).. la taille de l'image était de 2,5 mo au début, mais ensuite j'ai ramené de 500 à 700 ko. n'a pas de résoudre le problème.

n'ai pas essayé de changer le apache de la bibliothèque.. c'est peut-être le problème.. mais autant que j'ai lu sur le net, personne n'a rencontré ce avec httpmime bibliothèque.

que peut-il être? je suis complètement perdu maintenant 🙁

l'autre problème est que les délais d'attente parfois ne fonctionne pas.

comme quand il s'agit de cette ligne:
HttpResponse resp = mHttpClient.execute(la poste);
et j'ai désactiver la connexion 3g il attend simplement comme 17-20 minutes au lieu de 3 ou 5 secondes.. et alors seulement, déclenche une exception. essayé différentes méthodes. comme ceci:

        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);

mais ne fonctionne toujours pas 🙂

OriginalL'auteur Alex | 2011-02-04