Tôi đã viết các lớp học mà xử lý yêu cầu nhiều phần dữ liệu cho dự án của tôi Sceye-Fi, một máy chủ HTTP sử dụng com.sun.net.httpserver
lớp đi kèm với java 6, để nhận được cập nhật ảnh từ một thẻ Eye-Fi.
Điều này có thể giúp tải lên tệp (bài đăng nhiều phần).
Đối với một bài không nhiều phần dữ liệu, bạn sẽ cần phải làm một cái gì đó như thế này:
// determine encoding
Headers reqHeaders = exchange.getRequestHeaders();
String contentType = reqHeaders.getFirst("Content-Type");
String encoding = "ISO-8859-1";
if (contentType != null) {
Map<String,String> parms = ValueParser.parse(contentType);
if (parms.containsKey("charset")) {
encoding = parms.get("charset");
}
}
// read the query string from the request body
String qry;
InputStream in = exchange.getRequestBody();
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte buf[] = new byte[4096];
for (int n = in.read(buf); n > 0; n = in.read(buf)) {
out.write(buf, 0, n);
}
qry = new String(out.toByteArray(), encoding);
} finally {
in.close();
}
// parse the query
Map<String,List<String>> parms = new HashMap<String,List<String>>();
String defs[] = qry.split("[&]");
for (String def: defs) {
int ix = def.indexOf('=');
String name;
String value;
if (ix < 0) {
name = URLDecoder.decode(def, encoding);
value = "";
} else {
name = URLDecoder.decode(def.substring(0, ix), encoding);
value = URLDecoder.decode(def.substring(ix+1), encoding);
}
List<String> list = parms.get(name);
if (list == null) {
list = new ArrayList<String>();
parms.put(name, list);
}
list.add(value);
}
Nguồn
2011-05-04 22:11:35
Tại sao bạn không chuyển tên cho URLDecoder? – ceving
@ceving yes, tên cũng có thể được giải mã URL –