0

我用过谷歌验证码,效果很好。form也没有enctype 。我想在同一个form元素中上传图片。然后将 anenctype="multipart/form-data"添加到表单的属性中。我遇到了以下问题,我使用 JSP servlet:

1.

String challenge = request.getParameter("recaptcha_challenge_field"); 

String uresponse = request.getParameter("recaptcha_response_field");  

这里的挑战和 uresponse 给出了空值,因此

ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remote, challenge, uresponse);  

给出了空指针异常。

编辑:我后来发现,当使用enctype="multipart/form-datain标记时,无法像在 Servlet 中form那样检索参数及其值。request.getParameter('')

2.FileItem然后我尝试通过以下 方式获取上述参数(挑战和uresponse)的值

 FileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   List items = null;
   items = upload.parseRequest(request);
   Iterator itr = items.iterator();                        
                    while (itr.hasNext()) {
                        FileItem item = (FileItem) itr.next();
                        if (item.isFormField()) {
                            String name = item.getFieldName();
                            System.out.println("name: " + name);
                            String value = item.getString();
                            System.out.println("value: " + value); // closing scopes   ....  

这些输出没有给出“recaptcha_challenge_field”和“recaptcha_response_field”的打印结果。但是 HTML 元素的其他参数和值input是可用的。我观察到的是,当删除表单 enctype 时,servlet 可以具有这些参数('recaptcha_challenge_field' 和 'recaptcha_response_field')及其值。当仅添加表单 enctype 时,servlet 中不可用的参数。(request.getParameter('recaptha challenge parameter or recaptha-response-field parameter'))。

编辑我检查了浏览器是否发送了这些参数(recaptha-challenge ane recaptha-response-field.)及其值,并发现浏览器可以很好地发送所有参数。问题可能出在 servlet 并在FileItem

我想用这个谷歌验证码上传图片(用于人工验证)。我当前的实现不起作用。有谁让我知道如何实现这个?

4

1 回答 1

0

原因在于 html 本身。当inputtype-file 为空时(用户尚未从本地 pc 中选择文件),很难或(无法完成)检索所有低于 html 元素名称的参数名称及其值(在 servelt 中)在我的问题中提到的我的场景中。

于 2012-04-23T11:43:05.617 回答