gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:06:18 25 4
gpt4 key购买 nike

所以,我有一个网络服务器来处理连接请求,将整个请求存储到一个字符串中(我相信问题就在这里),然后再进行任何类型的处理。

        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,则将二进制数据保存到文件中。

适用于文本文件,不适用于损坏的二进制文件。

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

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

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

最佳答案

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

关于Java serversocket(http) 从 POST 读取二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21953402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com