2017-04-07 86 views
1

我尝试使用Box API将文件上传到Box。但无论我尝试,我总是收到400 Bad Request没有任何其他信息。有关这个问题的任何想法?使用curl将文件上传到Box API

卷曲https://upload.box.com/api/2.0/files/content \ -H “授权:承载ACCESS_TOKEN” -X POST \ -F属性=“{ ”名称“: ”tigers.jpeg“, ”亲本“:{ ”ID“:”11446498 “}}” \ -F [email protected]

try { 
    String url = "https://upload.box.com/api/2.0/files/content"; 
    WebResource resource = client.resource(url); 

    JSONObject parentInput = new JSONObject(); 
    parentInput.put("id", "0"); 

    JSONObject inputJson = new JSONObject(); 
    fileName = fileName.trim(); 
    inputJson.put("name", fileName); 
    inputJson.put("parent", parentInput); 
    input = inputJson.toString(); 

    FormDataMultiPart form = new FormDataMultiPart(); 

    String cdMeta = "form-data; name=\"attributes\";"; 
    String cdFile = "form-data; name=\""+fileName+"\";"; 

    FormDataContentDisposition cdmetaObj = new FormDataContentDisposition(cdMeta); 
    FormDataBodyPart metaDdbpart = new FormDataBodyPart(cdmetaObj, input); 
    form.bodyPart(metaDdbpart); 

    FormDataContentDisposition cdFileObj = new FormDataContentDisposition(cdFile); 

    FormDataBodyPart fileDdbpart = new FormDataBodyPart("file", inputStream, 
    MediaType.APPLICATION_OCTET_STREAM_TYPE); 

    fileDdbpart.setContentDisposition(cdFileObj); 
    form.bodyPart(fileDdbpart); 

    //Here we are using builder for executing client request 
    Builder builder = resource.header("Content-Type", 
    MediaType.MULTIPART_FORM_DATA).header("Authorization","Bearer " + accessToken); 
    ClientResponse response = builder.post(ClientResponse.class, form); 
    String result = response.getEntity(String.class); 
} catch (Exception e) { 
    e.printStackTrace(e); 
} 
+0

错误可能与格式错误的JSON数据有关。我建议你首先检查Box文档。 – 2017-04-07 16:46:39

回答

1

我得到了解决,现在是小的更改已成功上传。这里的问题是正确管理contentDisposition

try { 
    String url = "https://upload.box.com/api/2.0/files/content"; 
    WebResource resource = client.resource(url); 

    JSONObject parentInput = new JSONObject(); 
    parentInput.put("id", "0"); 

    JSONObject inputJson = new JSONObject(); 
    fileName = fileName.trim(); 
    inputJson.put("name", fileName); 
    inputJson.put("parent", parentInput); 
    input = inputJson.toString(); 

    FormDataMultiPart form = new FormDataMultiPart(); 

    String cdMeta = "form-data; name=\"metadata\";"; 
    String cdFile = "form-data; name=\"content\"; 
    filename = \"" + fileName + "\";"; 


    FormDataContentDisposition cdmetaObj = new FormDataContentDisposition(cdMeta); 
    FormDataBodyPart metaDdbpart = new FormDataBodyPart(cdmetaObj, input); 
    form.bodyPart(metaDdbpart); 

    FormDataContentDisposition cdFileObj = new FormDataContentDisposition(cdFile); 

    FormDataBodyPart fileDdbpart = new FormDataBodyPart("file", inputStream, 
     MediaType.APPLICATION_OCTET_STREAM_TYPE); 

    fileDdbpart.setContentDisposition(cdFileObj); 
    form.bodyPart(fileDdbpart); 

    //Here we are using builder for executing client request 

    Builder builder = resource.header("Content-Type", 
     MediaType.MULTIPART_FORM_DATA).header("Authorization", "Bearer " + accessToken); 
    ClientResponse response = builder.post(ClientResponse.class, form); 
    String result = response.getEntity(String.class); 
} catch (Exception e) { 
    e.printStackTrace(e); 
} 
}