Comment utiliser une image / une image lors du téléchargement multipart / form-data sur Android
C'est mon code.
J'ai eu erreur Http 400, quelqu'un peut-il m'aider?
HttpClient httpClient;
HttpPost httpPost;
HttpResponse response;
HttpContext localContext;
FileEntity tmp = null;
String ret = null;
httpClient = new DefaultHttpClient( );
httpClient.getParams().setParameter( ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109) ;
httpPost = new HttpPost(url);
tmp = new FileEntity( data,"UTF-8" );
httpPost.setEntity( tmp );
httpPost.setHeader( "Content-Type", "multipart/form-data" );
httpPost.setHeader( "access_token", facebook.getAccessToken( ) );
httpPost.setHeader( "source", data.getAbsolutePath( ) );
httpPost.setHeader( "message", "Caption for the photo" );
localContext = new BasicHttpContext( );
response = httpClient.execute( httpPost,localContext );
bobince, merci, c'est ma nouvelle id, je vais essayer de mettre un OAuth pour mon en-tête de connexion.
Et c'est mon ancien code, je vais le mettre à jour bientôt.
private void uploadPicture( ) throws ParseException, IOException {
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams( ).setParameter( CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1 );
HttpPost httppost = new HttpPost( "https://graph.facebook.com/me/photos" );
File file = new File( sdpicturePath );
//DEBUG
Log.d( "TSET", "FILE::" + file.exists( ) ); //IT IS NOT NULL
Log.d( "TEST", "AT:" + fbAccessToken ); //I GOT SOME ACCESS TOKEN
MultipartEntity mpEntity = new MultipartEntity( );
ContentBody cbFile = new FileBody( file, "image/png" );
ContentBody cbMessage = new StringBody( "TEST TSET" );
ContentBody cbAccessToken = new StringBody( fbAccessToken );
mpEntity.addPart( "access_token", cbAccessToken );
mpEntity.addPart( "source", cbFile );
mpEntity.addPart( "message", cbMessage );
httppost.setEntity( mpEntity );
//DEBUG
System.out.println( "executing request " + httppost.getRequestLine( ) );
HttpResponse response = httpclient.execute( httppost );
HttpEntity resEntity = response.getEntity( );
//DEBUG
System.out.println( response.getStatusLine( ) );
if (resEntity != null) {
System.out.println( EntityUtils.toString( resEntity ) );
} //end if
if (resEntity != null) {
resEntity.consumeContent( );
} //end if
httpclient.getConnectionManager( ).shutdown( );
} //end of uploadPicture( )
source d'informationauteur Joseph
Vous devez vous connecter pour publier un commentaire.
setEntity
définit la source de l'ensemble du corps de la requête, de sorte que cela ne fonctionne que si ledata
fichier était déjà codémultipart/form-data
bloc.Pour créer un
multipart/form-data
codé de soumission de formulaire pour une utilisation en tant que POST du corps de la requête, vous aurez besoin d'un MIME multipart codeur, généralementorg.apache.http.entity.mime.MultipartEntity
. Malheureusement, ce n'est pas fourni par Android donc, si vous voulez, vous aurez à tirer dans une nouvelle HttpClient de Apache.Voir cette question par exemple, le code et ce fil pour le fond.
Il est ma solution de travail pour l'envoi de l'image à afficher, à l'aide d'apache http bibliothèques:
comme pour facebook api graphique, ce code fonctionne parfaitement.
cependant, parfois, vous avez besoin d'utiliser nom au lieu de nom de fichier, l'api graphique semble en conflit avec la rfc document.