2017-09-01 3 views
1

Je développe l'API Google Drive à l'aide de l'API Restful.Téléchargement de fichiers Java en plusieurs parties avec JSON

Je dois télécharger un fichier et un corps json. Mais quand j'essaye de télécharger avec mon code java, j'ai rencontré le code d'erreur de google-drive.

==>demande non valide avec 0 multipart pièces mime

Voici le guide de Google Drive. enter image description here

Et voici mon code. Quel est le problème dans mon code?

public int uploadFileToGoogleDrive(File file, Long acctId, String 
accessToken, JSONObject json) { 
    HttpClient httpClient = new HttpClient(); 
    PostMethod method = null; 
    Integer result = -1; 
    String boundary = "---------------------------" + System.currentTimeMillis(); 
    try { 
     method = new PostMethod("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"); 
     method.setRequestHeader("Authorization", "Bearer " + accessToken); 
     method.setRequestHeader("Content-Type", "multipart/related; boundary=" + boundary); 

     Part[] parts = {new StringPart("",json.toString(),"utf-8"), new FilePart(file.getName(), file, null, "utf-8")}; 

     //MultipartRequestEntity multipartRequestEntity = new MultipartRequestEntity(parts, method.getParams()); 
     method.setRequestEntity(new MultipartRequestEntity(parts, method.getParams())); 

     httpClient.getHttpConnectionManager().closeIdleConnections(0); 
     result = httpClient.executeMethod(method); 

     if (result == HttpStatus.SC_OK) { 
      InputStream rstream = null; 
      rstream = method.getResponseBodyAsStream(); 
      BufferedReader br = new BufferedReader(
        new InputStreamReader(rstream)); 
      String line; 
      while ((line = br.readLine()) != null) { 
       resultString += line; 
      } 
     } 
     System.out.println("##############################################\n" + json.toString() + "\n##############################################"); 
     logger.debug(resultString); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     logger.error(e.getMessage(), e); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     logger.error(e.getMessage(), e); 
    } 
    catch (ProtocolException e) { 
     // TODO Auto-generated catch block 
     logger.error(e.getMessage(), e); 
    } 
    catch (IOException e) { 
     // TODO Auto-generated catch block 
     logger.error(e.getMessage(), e); 
    }finally { 
     method.releaseConnection(); 
    } 
    return result; 
} 

}

Répondre

0

téléchargements de formulaire multipart fonctionnent très bien. Il suffit de ne pas spécifier un Content-Type personnalisé. Votre type de contenu va échouer sinon parce que la limite de données de formulaire est déterminée par la bibliothèque XHR en interne. Si vous souhaitez utiliser votre type de contenu, vous devrez construire votre demande séparément et le coller sous forme de texte dans le mode « Raw »

regard sur this discussioin et this one