使用Apache HttpClient在多部分HTTP请求部分中设置上载文件的Content-Transfer-Encoding

时间:2015-10-08 18:30:11

标签: java apache http multipart

我正在使用apache http库来构建和发送一个多部分的http请求,该请求在正文中有一个文件部分。这是我的请求的一小部分样本

Request POST HTTPS://hostname:9443/di/resources/upload?logonId=user1 HTTP/1.1:
 Headers: Content-Type: multipart/form-data  Set-Cookie: Path=/; HttpOnly  TrustToken: -1000%2CCaKOjiTFmje3%2Fw0GGcw5%2BDwgxXHjHdQShQgW1QGiHYk%3D  
 Body: --ncFZGuKp50zCWWImlBFZjxbanSSoJt
Content-Disposition: form-data; name="File 1"; filename="SampleData_en.csv"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

Identifier,title,,,,,,,,,,,,,,
Plan: Entries (1) or ent2 (2) ,2,"Set to 1 to specify plan is for Catalog Entries, set to 2 etc ..... 

--ncFZGuKp50zCWWImlBFZjxbanSSoJt--

该项目是该服务基于apache wink,在解码正文中的标题时会出现问题,这会产生这种错误

Caused by: java.lang.StringIndexOutOfBoundsException
        at java.lang.String.substring(String.java:1240)
        at org.apache.wink.common.internal.providers.multipart.MultiPartParser.parseHeaders(MultiPartParser.java:264)
        at org.apache.wink.common.internal.providers.multipart.MultiPartParser.nextPart(MultiPartParser.java:109)
        at org.apache.wink.common.model.multipart.InMultiPart.hasNext(InMultiPart.java:83)

我认为解决方法是从正文中删除Content-Transfer-Encoding?或者将其更改为不同的编码,也许是base64。

唯一的问题是我不知道如何使用apache库做到这一点,并且找不到任何示例。以下是我使用apache创建HttpPost请求的实体部分的代码:

MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create();

File file1 = RequestUtils.getFileBody(filePath);
FileBody fileBodyFile1 = new FileBody(file1, org.apache.http.entity.ContentType.create("application/octet-stream"),
file1 .getName());
reqEntity.addPart("File 1", fileBodyFile1);

0 个答案:

没有答案