首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用OPENTEXT REST API上传文档

无法使用OPENTEXT REST API上传文档
EN

Stack Overflow用户
提问于 2018-12-19 14:16:38
回答 1查看 1.5K关注 0票数 2

我是OPENTEXT Rest API的新手,虽然我能够使用它进行身份验证/创建文件夹,但我无法让文档上传正常工作。以下是我一直使用的代码:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.net.URISyntaxException;

import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;


URIBuilder builder = new URIBuilder(https://bla.com/<restapiroot/v2/nodes");

builder.setParameter("type",                 "144")
       .setParameter("parent_id",            "123456")
       .setParameter("name",                 "bla.pdf")
       .setParameter("file",                 "C:\\My_Data\\bla.pdf");

MultipartEntityBuilder multiPartBuilder = MultipartEntityBuilder.create();

multiPartBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multiPartBuilder.addBinaryBody("ufile", new File (fullFileName), ContentType.DEFAULT_BINARY, fileName);
multiPartBuilder.setBoundary("aall12dk@@Joey");

HttpPost httpPostRequest = new HttpPost(builder.build());

httpPostRequest.addHeader( "<auth code name>", "value" );
httpPostRequest.addHeader( HttpHeaders.CONTENT_TYPE, "multipart/form-data; boundary=aall12dk@@Joey" );
httpPostRequest.addHeader( "Content-Disposition", "attachment;filename=" + "bla.pdf" );

httpPostRequest.setEntity(multiPartBuilder.build());

HttpResponse response = = httpClient.execute(httpPostRequest);

我得到以下错误:

代码语言:javascript
复制
00:47:47.694 [main] DEBUG org.apache.http.wire - http-outgoing-0 << "{"error":"Could not process object, invalid action \u0027create\u0027"}"
00:47:47.695 [main] DEBUG org.apache.http.headers - http-outgoing-0 << HTTP/1.1 500 Internal Server Error

我不确定我是否调用了错误的API和/或是否完全错误地编写了文件上传逻辑。任何帮助都将不胜感激。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-01-03 01:11:47

我找到了解决这个问题的办法。基本上,答案是只使用通用URIBuilder。其他的一切都会转到多部分构建器中:

代码语言:javascript
复制
URIBuilder builder = new URIBuilder("https://bla.com/<restapiroot>/v2/nodes");

MultipartEntityBuilder multiPartBuilder = MultipartEntityBuilder.create();

multiPartBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multiPartBuilder.setBoundary("aall12dk@@RandomBoundary2019");           //Random value basically.

multiPartBuilder.addPart("type",                 new StringBody(String.valueOf(LAPI_DOCUMENTS.DOCUMENTSUBTYPE), ContentType.MULTIPART_FORM_DATA));
multiPartBuilder.addPart("parent_id",            new StringBody(String.valueOf(parentId),                       ContentType.MULTIPART_FORM_DATA));
multiPartBuilder.addPart("name",                 new StringBody(fileName,                                       ContentType.MULTIPART_FORM_DATA));
multiPartBuilder.addPart("file",                 new FileBody(new File (fullFileName),                          ContentType.DEFAULT_BINARY));
multiPartBuilder.addPart("description",          new StringBody(comments,                                       ContentType.MULTIPART_FORM_DATA));
multiPartBuilder.addPart("external_create_date", new StringBody("2017-12-10",                                   ContentType.MULTIPART_FORM_DATA)); 
multiPartBuilder.addPart("external_modify_date", new StringBody(LocalDate.now().toString(),                     ContentType.MULTIPART_FORM_DATA)); 
multiPartBuilder.addPart("external_source",      new StringBody("ftp",                                          ContentType.MULTIPART_FORM_DATA));

HttpPost httpPostRequest = new HttpPost(builder.build());
httpPostRequest.addHeader("<TicketHeaderName>", "<ticket value>");

httpPostRequest.setEntity(multiPartBuilder.build());

HttpResponse response = httpClient.execute(httpPostRequest);      //need to assign response to variable or you'll end up with hanging connections.

if ( response.getStatusLine().getStatusCode() != 200 ) {

    //Error handling logic
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53845544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档