我使用Apache HttpCore HttpAsyncRequestHandler来处理POST请求。 我怎样才能获得表格提交的参数?
答案 0 :(得分:0)
处理程序中可用的帖子正文。 EntityUtils.toByteArray(httpRequest.getEntity())
会为您提供全部数据。
我没有找到任何通用实用程序来解析它。 我写了一个自定义解析器,它可以让我获取params和任何上传的文件。
下面的代码为我提供了params map中的params和输出中的文件内容。当所有数据都在内存中时,它会因巨大的文件而崩溃。 (警告:WIP)
InputStream inputStream = new ByteArrayInputStream(data);
ByteArrayOutputStream output = new ByteArrayOutputStream();
HashMap<String, String> params = new HashMap<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String currentLine = reader.readLine();
String boundary = currentLine;
while(reader.ready()) {
currentLine = reader.readLine();
if (currentLine.contains("Content-Disposition: form-data;")) {
String paramName = currentLine;
paramName = paramName.replace("Content-Disposition: form-data; name=","").replace("\"","");
StringBuilder paramValue = new StringBuilder();
if(paramName.contains("filename")) {
String[] temp = paramName.split(";");
paramName = temp[0];
paramValue.append(temp[1].replace("filename", "").replace("=", "").replace(" ", ""));
} else {
currentLine = reader.readLine();
while(!currentLine.contains(boundary)) {
paramValue.append(currentLine);
currentLine = reader.readLine();
}
}
params.put(paramName, paramValue.toString());
}
if (currentLine.contains("Content-Type: ")) {
// File Content here
reader.readLine();
String prevLine = reader.readLine();
currentLine = reader.readLine();
//writing the data to a output stream
while (true) {
if (currentLine.contains(boundary)) {
output.write(prevLine.getBytes());
break;
}
else {
output.write(currentLine.getBytes());
}
prevLine = currentLine;
currentLine = reader.readLine();
}
}
}