java 接受文件流
1. 接受响应体:
public class BinaryResponse {
private Integer statusCode = null;
private byte[] result = null;
private boolean success = false;
private Map<String, String> headerMap;
}
2. 发送请求 "Filename" 需要与被请求者一致
public BinaryResponse getBinaryCall(RestRequest restRequest){
final String url = restRequest.getUrl();
HttpMethod httpMethod = restRequest.getMethod();
Map<String, String> headerMap = restRequest.getHeaderMap();
logger.info("rest call > " + restRequest.getMethod() + " " + url);
ResponseEntity<byte[]> responseEntity = null;
RestTemplate restTemplate = buildRestTemplate();
HttpHeaders headers = setHttpHeaders(httpMethod);
if (headerMap != null) {
headers.setAll(headerMap);
}
HttpEntity<byte[]> entity = new HttpEntity<byte[]>(headers);
responseEntity = restTemplate.exchange(url, httpMethod, entity,
byte[].class);
if (responseEntity == null) {
throw new PhoenixException("rest exchange return null");
}
int retStatus = responseEntity.getStatusCodeValue();
byte[] retData = responseEntity.getBody();
if (retStatus != HttpStatus.OK.value()) {
String retMessage = new String(retData);
logger.error("call " + url + " return httpcode:" + retStatus
+ ", return content:" + retMessage);
}
BinaryResponse binaryRsp = new BinaryResponse();
binaryRsp.setResult(retData);
binaryRsp.setStatusCode(retStatus);
binaryRsp.setSuccess(true);
String filename = responseEntity.getHeaders().getFirst("Filename");
String contentDisposition = responseEntity.getHeaders()
.getFirst("Content-Disposition");
Map<String, String> map = new HashMap<>();
if (StringUtils.isNotEmpty(contentDisposition))
map.put("Content-Disposition", contentDisposition);
map.put("Filename", filename);
binaryRsp.setHeaderMap(map);
return binaryRsp;
}
public void retSuccessWithStream(byte[] msg,
Map<String, String> headerMap) {
if (headerMap != null && !headerMap.isEmpty()) {
for (Map.Entry<String, String> iterator : headerMap.entrySet()) {
response.setHeader(iterator.getKey(), iterator.getValue());
}
}
HttpResponseUtils.writeJsonWithStream(response, 200, msg,
MediaType.APPLICATION_OCTET_STREAM_VALUE);
}
public static void writeJsonWithStream(HttpServletResponse response,
int httpCode, byte[] msg, String contentType) {
response.setContentType(contentType);
response.setCharacterEncoding("utf-8");
response.setStatus(httpCode);
try {
ServletOutputStream out = response.getOutputStream();
out.write(msg);
out.flush();
out.close();
} catch (IOException e) {
logger.error("writeJson error : ", e);
}
}