如何从servlet请求对象中读取blob数据

时间:2015-02-12 12:05:22

标签: java

有客户端和服务器组件,客户端通过使用POST方法将blob中的数据转换为服务器,以更安全的方式发送数据。

可以建议我如何将该blob数据转换为服务器端(Java)中的字符串对象。我已尝试过以下代码

         Way 1):
        ==============================
        String streamLength = request.getHeader("Content-Length");
        int streamIntLength = Integer.parseInt(streamLength);
        byte[] bytes = new byte[streamIntLength];
        request.getInputStream().read(bytes, 0, bytes.length);
        String content = DatatypeConverter.printBase64Binary(bytes);
        System.out.println(content);

        Output for above code is  : some junk data is displaying.

        dABlAG0AcABsAGEAdABlAD0AMgAzADUAUgBfAFAAcgBvAHYAaQBkAGUAcgBfA

        Way 2) : 
        ======
        BufferedReader reader = new BufferedReader(new InputStreamReader(
        request.getInputStream()));
        StringBuilder sb = new StringBuilder();
        for (String line; (line = reader.readLine()) != null;) {
           String str = new String(line.getBytes());
           System.out.println(str);
        }

        Please suggest me any one, above both ways are not worked out.

2 个答案:

答案 0 :(得分:1)

下面的代码适用于我。

StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
try {
String streamLength = request.getHeader("Content-Length");
int streamIntLength = Integer.parseInt(streamLength);
InputStream inputStream = request.getInputStream();
if (inputStream != null) {
bufferedReader = new BufferedReader(new InputStreamReader(
inputStream));
char[] charBuffer = new char[streamIntLength];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
}
} else {
stringBuilder.append("");
}
} catch (IOException ex) {
throw ex;
} 
String body = stringBuilder.toString();
//System.out.println(body);
byte[] bytes = body.getBytes();
System.out.println(StringUtils.newStringUtf16Le(bytes));

答案 1 :(得分:0)

从第一种方法看,数据似乎是编码的(可能采用Base64格式)。解码后,您面临的问题是什么?如果数据是String然后编码为Base64,则应在解码后获取实际字符串。 (假设客户端和服务器端的平台区域设置相同)。

如果是二进制数据,最好只将其保留在字节流中。如果你无论如何想要它转换为字符串,那么第一种方法看起来没问题。 如果此二进制数据表示某种文件,您可以使用HTTP标头获取相关信息并将其写入临时位置以供进一步使用。