Java serversocket(http)从POST读取二进制数据

时间:2014-02-22 11:07:46

标签: java post stream inputstream serversocket

所以,在进行任何类型的处理之前,我有一个处理连接请求的网络服务器,将整个请求存储到一个字符串(问题依赖于此我相信)。

        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));

        // Loop here until there is no more to read, but wait until the first message arrives.
        while (in.ready() || httpRequestString.isEmpty()) {
            // Read one integer at the time and cast it to a character.
            httpRequestString += (char) in.read();

        }

然后将其发送到HttpRequest类以检查它,如果是POST,则将二进制数据保存到文件中。

与文本文件一起使用,而不是使用损坏的二进制文件。

我知道你不应该逐行读取二进制文件(特别是用扫描仪)并用printwriter写它,但我必须检查请求并查找文件内容的起始和结束边界,因此我想出了快速的临时代码,只是为了展示我的内容。

scanner = new Scanner(body);
while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    if (line.equals("--" + boundary)) {
        fileName = scanner.nextLine().split("filename=")[1].replaceAll("\"", "");
        fileType = scanner.nextLine();
        scanner.nextLine(); //empty line

        PrintWriter fileOutput = new PrintWriter(rootFolder + File.separator + fileName);
        //FileOutputStream fileOutput1= new FileOutputStream(new File(rootFolder + File.separator + fileName));
        String prev = scanner.nextLine();

        while (scanner.hasNextLine()){
            String next = scanner.nextLine();
            System.out.println("reading from: " + prev);
            if (!(next.equals("--" + boundary + "--"))){
                fileOutput.println(prev);
                prev = next;
            }
            else {
                fileOutput.print(prev);
                break;
            }
        }
        fileOutput.close();
    }
}
scanner.close();

如何在开始时存储整个请求,而不是松散进程上的任何字节,并能够检查内容并从中提取二进制数据?

1 个答案:

答案 0 :(得分:0)

通过阅读您的java源代码,您似乎尝试解析mime多部分响应。也许你应该考虑使用java.mail API。以下是有关此API的帖子的链接:Read multipart/mixed response in Java/Groovy