簡體   English   中英

MultipartEntity:InputStream的Content-Length

[英]MultipartEntity: Content-Length for InputStream

我正在嘗試從multistream / form-data中的inputstream發送數據,作為使用以下參數的文件參數:

MultipartEntityBuilder.create()
            .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
            .addBinaryBody("file", inputStream)
            .build();

問題是服務器似乎需要Content-Length標頭。 我知道inputStream的正確大小-我可以手動設置它嗎?

您可以使用ContentBody創建自己的FormBodyPart ,而不是使用addBinaryBody方法。 合適的ContentBodyInputStreamBody但其getContentLength方法返回-1

我建議您擴展類以提供自定義內容長度。

class KnownSizeInputStreamBody extends InputStreamBody {   
    private final long contentLength;

    public KnownSizeInputStreamBody(InputStream in, long contentLength, ContentType contentType) {
        super(in, contentType);
        this.contentLength = contentLength;
    }

    @Override
    public long getContentLength() {
        return contentLength;
    }
}

然后,您可以將多部分實體創建為

FormBodyPart bodyPart = FormBodyPartBuilder.create().setName("file")
        .setBody(new KnownSizeInputStreamBody(inputStream, contentLenth, ContentType.APPLICATION_OCTET_STREAM)).build();

HttpEntity entity = MultipartEntityBuilder.create().addPart(bodyPart).build();

適當時(您自己的內容類型,內容長度,名稱等)。

在我的情況下,http客戶端為整個多部分請求正文而不是每個部分編寫了內容長度。

暫無
暫無

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

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