NutzCN Logo
问答 加了@AdaptBy注解的入口函数,上传文件时,req的paramMap为空
发布于 1881天前 作者 Leewell1989 1773 次浏览 复制 上一个帖子 下一个帖子
标签:

1.入口函数定义

@At("/put")
    @Ok("json")
    @AdaptBy(type = UploadAdaptor.class, args = { "ioc:uploadAdaptor_rm" })
    public Object put(@Param("r") TempFile[] tmpFiles) throws Exception {
}

2.调用

Map<String, Object> param = new HashMap<String, Object>();
            param.put("secret", SECRET);
            param.put("r", f);//f为一个文件对象
            param.put("sign", Lang.md5(HttpClientService.joinParams(param, false, false)));
            param.remove("secret");
            param.put("timestamp", String.valueOf(System.currentTimeMillis()));
            param.put("key", KEY);

            //request
            Request req = Request.create(RM_URL + "/r/put" ,Request.METHOD.POST);
            req.getParams().putAll(param);
            Sender sender = Sender.create(req);
            sender.setTimeout(30 * 1000);
            Response resp = sender.send();

2.1 当 param.put("r", f)时, 入口函数的request.getParameterMap()为空
2.2 当不传文件时,request.getParameterMap()能正常接收key,sign等参数
2.3 入口函数显示声明这些参数,可以正常接收

public Object put(@Param("r") TempFile[] tmpFiles, String key, String sign, String timestamp) throws Exception {
    //这里能接收到所有参数
}

3.因为这个入口函数需要使用filter获取这些参数来完成验证,不想改成显示声明的方式,有什么办法来do it

1 回复
当 param.put("r", f)时, 入口函数的request.getParameterMap()为空

文件上传是mulitpart,不是普通表单了,request.getParamterMap()是容器解析表单得到的,既然不是表单请求,自然啥都办不到。

你想得到全部参数的话,写@Param("..")NutMap params

添加回复
请先登陆
回到顶部