java - 使用 Apache REST 客户端上传多部分文件

标签 java http onedrive multipartentity

我尝试使用多部分请求将文件上传到 OneDrive。我尝试了很多方法,但都没有用。

请求的形式是:-

POST /drive/items/{folder-id}/children
Content-Type: multipart/related; boundary="A100x"

--A100x
Content-ID: <metadata>
Content-Type: application/json

{
  "name": "newfile.txt",
  "file": {},
  "@content.sourceUrl": "cid:content",
  "@name.conflictBehavior": "rename"
}

--A100x
Content-ID: <content>
Content-Type: text/plain

Contents of the file to be uploaded.

--A100x--

我试过很多方法。下面添加了我为此所做的代码片段。任何帮助将不胜感激。

片段:-

            HttpClient httpClient = HttpClientBuilder.create().build();
            URIBuilder uriBuilder = new URIBuilder(URI);
            HttpPost post = new HttpPost(uriBuilder.build());
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            Charset chars = Charset.forName("utf-8");
            builder.setCharset(chars);
            post.setEntity(builder.build());
            builder.addPart("content", new FileBody(new File("/home/myfiles/test"), ContentType.APPLICATION_OCTET_STREAM, "test"));
            builder.addPart("metadata", new StringBody(metaJson, ContentType.APPLICATION_JSON));
            post.setHeader("Content-Type", "multipart/form-data");
            post.addHeader("Authorization", "Bearer " + ACCESS_TOKEN);
            try {
                HttpResponse response = httpClient.execute(post);
                if (response.getStatusLine().getStatusCode() == 200) {
                    br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));
                    responseBuilder = new StringBuilder();
                    while ((output = br.readLine()) != null) {
                        responseBuilder.append(output);
                    }
                } else {
                    System.out.println("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

网址:

https://api.onedrive.com/v1.0/drive/root:/myfiles/children

最佳答案

后来我意识到我可以使用简单的文件上传,前提是我的文件是简单的 doc 文件。并使用 Apache REST 客户端实现了解决方案。

代码片段:-

    BufferedReader br = null;
    String output;
    StringBuilder responseBuilder = null;
    HttpClient httpClient = HttpClientBuilder.create().build();
    URIBuilder uriBuilder = new URIBuilder(<UPLOAD_URL>);
    HttpPut request = new HttpPut(uriBuilder.build());
    request.addHeader("Authorization", "Bearer " + oneDriveConnection.getAccessToken());
    request.addHeader("Content-Type", mimeType);
    HttpEntity entity = new ByteArrayEntity(bytes);
    request.setEntity(entity);
    HttpResponse response = httpClient.execute(request);
    int responseCode = response.getStatusLine().getStatusCode();
    if (responseCode == 201 || responseCode == 200) {
        br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));
        responseBuilder = new StringBuilder();
        while ((output = br.readLine()) != null) {
            responseBuilder.append(output);
        }
    } else {
        logger.error("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
        throw new UploadException("Upload failure, Status code : " + response.getStatusLine().getStatusCode());
    }

关于java - 使用 Apache REST 客户端上传多部分文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38071023/

相关文章:

java - RxJava : observeOn, subscribeOn, and doFinally, IO和UI线程切换

java - https 到 http 重定向的 tuckey urlrewritefilter 问题

.htaccess - 如何在 codeigniter 中将 HTTP 调用重定向到 HTTPS 以获取 Web 服务?

c# - 使用 OneDrive API 同步文件的正确方法

java - scala for 循环值不是 Int 的成员

node.js - NodeJs HTTP 代理基本身份验证

javascript - 如何使用 Node.js 中的请求库获取原始 HTTP 消息体?

excel - 在一个驱动器中链接两个 Excel 工作表/SharePoint

iOS-使用 REST API 上传图片到 OneDrive

java - 编写数组将csv导入java