httphandler java_java – 读取发布请求值HttpHandler

本文介绍了一个使用Java 6的com.sun.net.httpserver包编写的HttpHandler类,该类专门处理从Eye-Fi卡上传照片的多部分请求。内容涉及到如何读取请求头的Content-Type来确定字符编码,以及解析非多部分请求的查询字符串,将请求体转换为HashMap存储参数。
摘要由CSDN通过智能技术生成

我编写了处理我的项目

Sceye-Fi的多部分请求的类,这是一个使用java 6附带的com.sun.net.httpserver类的HTTP服务器,用于从

Eye-Fi卡接收照片上传.

这有助于文件上传(多部分帖子).

对于非多部分帖子,您需要执行以下操作:

// determine encoding

Headers reqHeaders = exchange.getRequestHeaders();

String contentType = reqHeaders.getFirst("Content-Type");

String encoding = "ISO-8859-1";

if (contentType != null) {

Map 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> parms = new HashMap>();

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 list = parms.get(name);

if (list == null) {

list = new ArrayList();

parms.put(name, list);

}

list.add(value);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值