2017-09-01 27 views
1

私はRestful APIを使用してGoogle Drive APIを開発しています。JSONを使用したJavaマルチファイルアップロード

ファイルとjson本体をアップロードする必要があります。

しかし、自分のJavaコードでアップロードしようとすると、google-driveからエラーコードを受け取りました。

==>ここで0 MIME部分

不正なマルチパートリクエストには、Googleドライブのガイドです。 enter image description here

これは私のコードです。 私のコードで何が間違っていますか?

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

}

答えて

0

マルチパートフォームのアップロードがうまく動作します。カスタム Content-Typeを指定しないでください。 のフォームデータ境界はXHRライブラリによって内部的に決定されるため、コンテンツタイプは別の方法で失敗します。あなたのContent-Typeを使用したい 場合は、this discussiointhis one

外観を別途ご リクエストを構築し、「生」モードでテキストとして貼り付けする必要があります

関連する問題