java接受文件流

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);
        }
    }

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中接收文件的方式有很多种,以下是其中的一种实现方式: 1. 使用Socket传输文件 客户端代码: ```java File file = new File("file.txt"); Socket socket = new Socket("localhost", 8888); OutputStream os = socket.getOutputStream(); FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { os.write(buffer, 0, len); } fis.close(); os.close(); socket.close(); ``` 服务端代码: ```java ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); InputStream is = socket.getInputStream(); FileOutputStream fos = new FileOutputStream("file.txt"); byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); } fos.close(); is.close(); socket.close(); serverSocket.close(); ``` 2. 使用Servlet接收文件 客户端代码: ```java File file = new File("file.txt"); HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("http://localhost:8080/upload"); FileBody fileBody = new FileBody(file); MultipartEntity multipartEntity = new MultipartEntity(); multipartEntity.addPart("file", fileBody); httpPost.setEntity(multipartEntity); HttpResponse httpResponse = httpClient.execute(httpPost); ``` 服务端代码: ```java @WebServlet("/upload") @MultipartConfig public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part part = request.getPart("file"); InputStream is = part.getInputStream(); FileOutputStream fos = new FileOutputStream("file.txt"); byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); } fos.close(); is.close(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值