【问题标题】:Getting values of checkboxes along with uploading the file获取复选框的值以及上传文件
【发布时间】:2014-04-16 06:09:02
【问题描述】:

我试图在 java 中使用 commonsIO 和 Jar 上传图像以进行文件上传。但面临的问题是我的表单上有两个复选框,如下所示:

<div style="float:left">
  <input name="Mcheckbox" type="checkbox" value="Mobile"/>
  Mobile
</div>
<div style="float:right">
  <input name="Echechkbox" type="checkbox" value="Email"/>
  Email
</div>

然后浏览选项:

Upload Image : <INPUT TYPE="file" NAME="file" value="file"></input>

在我的 servlet 中我正在做这样的事情:

ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
List<FileItem> files = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
Iterator it = files.iterator();

然后:

while (it.hasNext()) {
    FileItem fi = (FileItem) it.next();

    if (fi.isFormField()) {
        if (fieldname.compareTo("Mcheckbox") == 0) {

            System.out.println("checkbox value is " + fieldvalue);
            mymobilepass = fieldvalue;
        } else if (fieldname.compareTo("Echeckbox") == 0) {

            System.out.println("checkbox value is " + fieldvalue);
            myemailpass = fieldvalue;
        }

    } else {
        InputStream is = fi.getInputStream();

        FileOutputStream fos = new FileOutputStream(path + "\\" + fi.getName());
        int x = is.read();

        while (x >= 0) {
            fos.write((byte) x);
            x = is.read();
            //System.out.println("reading");

        }
    }
}

但是每次都将 myemailpass 或 mymobilepass 的值设为 null。可能是什么原因? if 语句从不执行。为什么?请帮忙

【问题讨论】:

  • 您是否将所有内容都包含在 &lt;form&gt; 标记中,为什么不将值设为 request.getParameter("Mcheckbox" )
  • @sankrish 是的,我正在将所有内容都包装在表单中
  • @sankrish 因为我在这里解析了一次请求: List files = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);.如果我尝试再次获取参数,那么显然他们将是 NULL 。此外,形式 enctype="multipart/form-data"
  • @LeosLiterak 是的,它是“multipart/form-data”
  • @LeosLiterak 你说的多个实例是什么意思?我没听懂。

标签: java servlets file-upload


【解决方案1】:

问题是您没有在循环中设置fieldvalue

DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> files = new ServletFileUpload(factory).parseRequest(request);

for (FileItem item : files) {
    if (item.isFormField()) {
        String fieldname = item.getFieldName();
        String fieldvalue = item.getString();
        if (fieldname.compareTo("Mcheckbox") == 0) {
            System.out.println("checkbox value is " + fieldvalue);
            mymobilepass = fieldvalue;
        } else if (fieldname.compareTo("Echeckbox") == 0) {
            System.out.println("checkbox value is " + fieldvalue);
            myemailpass = fieldvalue;
        }

    } else {
        InputStream is = item.getInputStream();

        FileOutputStream fos = new FileOutputStream(path + "\\" + fi.getName());
        int x = is.read();

        while (x >= 0) {
            fos.write((byte) x);
            x = is.read();
            //System.out.println("reading");

        }
    }
}

【讨论】:

    【解决方案2】:

    这样试试,

     DiskFileUpload upload = new DiskFileUpload();
            String Chk1= "";
            String Chk2= "";
            try {
    
                List<FileItem> files= upload.parseRequest(request);
                for (FileItem item : files) {
                    if (item.isFormField()) {
                        if (item.getFieldName("Mcheckbox")) {
                           //do some thing here 
                        } 
                    }
    

    希望这会有所帮助!

    【讨论】:

    • @sankrish 你有什么改变?我没有看到任何这样的改变?
    • @user3522121 你没用这个方法getFieldName()
    猜你喜欢
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多