récupération de fichier via download url avec httpclient

cancel
Showing results for 
Search instead for 
Did you mean: 
gballanger
Member II

récupération de fichier via download url avec httpclient

Bonjour,

je dois réaliser un programme en java me permettant de downloader des fichier d'un repo alfresco.
Pour cela je dispose de l'url de téléchargement (http://alfresco:8080/alfresco/d/a/workspace/SpacesStore/86d4cf1a-1c66-4628-a934-e7a759556aec/Alfresc...) et d'un utilisateur admin (appelons le theadmin/thepassword)


package com.download;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;


public class DownloadAlfrescoFile {

   public static void main(String[] args) {

      Credentials creds = new UsernamePasswordCredentials("theadmin", "thepassword");

      HttpClient httpClient = new HttpClient();

      //httpClient.getParams().setAuthenticationPreemptive(true);

      httpClient.getState().setCredentials(
            new AuthScope(AuthScope.ANY_HOST, 8080, AuthScope.ANY_REALM), creds);

      GetMethod getMethod = new GetMethod(
            "http://alfresco:8080/alfresco/d/a/workspace/SpacesStore/86d4cf1a-1c66-4628-a934-e7a759556aec/Alfresc...");

      getMethod.setDoAuthentication(true);

      try {
         // execute the GET
         int status = httpClient.executeMethod(getMethod);

         // print the status and response
         System.out.println("get result:" + status);

         InputStream instream = getMethod.getResponseBodyAsStream();
         int l;
         byte[] tmp = new byte[2048];

         File tmpFile = new File("/tmp/Alfresco_user_guide.odt");
         OutputStream os = new FileOutputStream(tmpFile);

         while ((l = instream.read(tmp)) != -1) {
            os.write(tmp, 0, l);
         }
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         // release any connection resources used by the method
         getMethod.releaseConnection();
      }
   }
}

ce code me renvoie le status 401 et un fichier vide.

si je décommante la ligne

httpClient.getParams().setAuthenticationPreemptive(true);

j'obtiens le status 200 mais le fichier contiens la page de login en HTML (et pas le document openoffice esconté)

Pour info le repo alfresco est configuré avec des utilisateurs venant d'un LDAP/AD (pas de gestion native de user par alfresco)

la tentative ne génère aucun log sur le server.

Une idée ?
1 Reply
rguinot
Customer

Re: récupération de fichier via download url avec httpclient

401 = unauthorized.

un exemple utilisant httpclient est ici, l'avez vous regardé : http://wiki.alfresco.com/wiki/Portlet_Development
Peut etre qu'un connecteur CMIS serait plus approprié que votre méthode. d'autre part vos input streams / output streams ne sont pas wrappés dans des bufferedreader/writer