HttpPost写入主体以及请求参数

时间:2015-07-01 14:03:22

标签: java http-post apache-httpcomponents

我正在使用Apache的HttpPost。我正在尝试将文件上传到Web服务器,结果如下:

  

POST网站/上传?uploadType = chunked& requestId = {requestId} HTTP / 1.1

     

主机:      

接受:application / xml

     

的authToken:      

请求参数

     

requestId当前上传会话的唯一标识符。

     

请求标题

     

主机Web服务器的主机名。

     

接受响应的格式。有效值为:application / xml或application / json。

     

Authtoken成功登录后收到的身份验证令牌。

     

FileEOF指定是否已使用当前文件块到达文件末尾。允许的值为0和1.文件结束表示值1.

     

请求正文

     

以字节为单位包含文件块的内容。

我得出的是:

HttpPost post = new HttpPost(url);
            post.setHeader("Authtoken", params.get("token"));
            String fileName = file.getName();
            long offset = Long.parseLong(chunkOffset);
            //...
            post.setHeader("FileEOF", eof);
            /*List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
            postParameters.add(new BasicNameValuePair("requestId", requestId));
            post.setEntity(new UrlEncodedFormEntity(postParameters));*/

            fileInputStream.skip(offset);
            fileInputStream.read(bytes);
            post.setEntity(new ByteArrayEntity(bytes));

我在哪里写HttpPost的参数?

1 个答案:

答案 0 :(得分:1)

处理文件上传时,您必须使用MultipartEntityFileBody

示例:

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("someparameter1", new StringBody("Woody"));
entity.addPart("someparameter2", new StringBody("Woodpecker"));
File fileToSend = new File(filePath);
FileBody fileBody = new FileBody(fileToSend, "application/octet-stream");
entity.addPart("upload_file", fileBody);

httpPost.setEntity(entity);

使用MultipartEntityBuilder - 尝试以下操作:

MultipartEntityBuilder builder = MultipartEntityBuilder.create();        
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

final File aFile = new File(fileName);
FileBody fileBody = new FileBody(file);

builder.addPart("file", fileBody);  
builder.addTextBody("requestId", requestId);
final HttpEntity httpEntity = builder.build();