簡體   English   中英

Java HTTP發布多部分

[英]Java HTTP Post Multipart

我正在嘗試將HTTP Post Multipart請求發送到JAVA中的本地服務器。 我正在嘗試發送以下內容:

{
 "content-disposition": "form-data; name=\"metadata\"",
"content-type": "application/x-dmas+json",
 "body":         JSON.stringify(client_req)
},
{
"content-disposition": "attachment; filename=\"" + file + "\"; name=\"file\"",
"content-type": "application/octet-stream",
 "body":         [file content]
}

我已經研究了Apache HTTP組件,但是不允許我為每個部分指定內容類型和配置。 這是我使用Apache HTTP API在JAVA中編寫的內容:

`CloseableHttpClient httpclient = HttpClients.createDefault();

    try {
        HttpPost httppost = new HttpPost("IP");

        FileBody bin = new FileBody(new File(args[0]), "application/octet-stream");
        StringBody hash = new StringBody("{\"hash\": \"\", \"policy\": {\"retention_permitted\": true, \"distribution\": \"global\"}}", ContentType.create("application/x-dmas+json"));

        HttpEntity reqEntity = MultipartEntityBuilder.create()
                .addPart("metadata", hash)
                .addPart("file", bin)
                .build();


        httppost.setEntity(reqEntity);

`

FilePart和StringPart的構造函數參數和方法,與它們一起組成組成多部分請求的Part [],可以提供此信息。

可能為時已晚,但是作為對尋找相同問題答案的任何人的參考, MultipartEntityBuilder類中有幾種方法可以讓您為每個部分設置內容類型和內容處置。 例如,

  • addBinaryBody(字符串名稱,文件文件,ContentType contentType,字符串文件名)
  • addTextBody(字符串名稱,字符串文本,ContentType contentType)

如果我們在您的示例中使用上述方法,

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost uploadFile = new HttpPost("http://url-to-post/");

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
String jsonStr = "{\"hash\": \"\", \"policy\": {\"retention_permitted\": true, \"distribution\": \"global\"}}";
builder.addTextBody("metadata", jsonStr, ContentType.create("application/x-dmas+json"));
builder.addBinaryBody("file", new File("/path/to/file"),
    ContentType.APPLICATION_OCTET_STREAM, "filename");

HttpEntity multipart = builder.build();
uploadFile.setEntity(multipart);
HttpResponse response = httpClient.execute(uploadFile);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM