HttpServletRequest大文件读取防止内存溢出,读取前台传的json数据(application/json, text/plain, */*)

1.前台传输数据

2、对前台传的数据解析会用到,先将数据存在缓存然后输出到buffer,避免数据量太大读取不到问题

public static byte[] read(HttpServletRequest request, boolean cache) {
                byte[] buffer = (byte[])request.getAttribute("_anyline_request_read_cache_byte");
                if(null != buffer){
                        return buffer;
                }
        buffer = new byte[1024];
                ServletInputStream in = null;
                ByteArrayOutputStream out = null;
                try {
                        in = request.getInputStream();
                        out = new ByteArrayOutputStream();
                        int len;
                        while ((len = in.read(buffer)) != -1) {
                                out.write(buffer, 0, len);
                        }
                        buffer = out.toByteArray();
                        if(cache){
                                request.setAttribute("_anyline_request_read_cache_byte", buffer);
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                } finally {
                        if (null != out) {
                                try {
                                        out.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }
                return buffer;
        }

 

遇到读request存在的问题的代码:以下写法只读取一次,如果request传数太大,会导致读取不到数据

 

public static byte[] read(HttpServletRequest request, boolean cache) {
    byte[] buffer = (byte[])((byte[])request.getAttribute("_anyline_request_read_cache_byte"));
    if (null != buffer) {
        return buffer;
    } else {
        int len = request.getContentLength();
        if (len <= 0) {
            return new byte[0];
        } else {
            buffer = new byte[len];
            ServletInputStream in = null;

            try {
                try {
                    in = request.getInputStream();
                    in.read(buffer, 0, len);
                    if (cache) {
                        request.setAttribute("_anyline_request_read_cache_byte", buffer);
                    }
                } catch (IOException var9) {
                    var9.printStackTrace();
                }

                return buffer;
            } finally {
                ;
            }
        }
    }
}

版权声明:本文为qq_19897551原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。