0

下面的页面有两种形式,一种是没有修饰的简单上传表单,另一种是使用jquery-ui库进行修饰的表单。当我单击常规表单的提交按钮时,数据完全被提交,我的意思是上传的文件完美地转到所需的文件夹,但是当我使用点击按钮触发其他表单的提交功能时,servlet 被调用但相同的参数不会传递给 servlet。我的意思是当我使用装饰表单提交时,没有任何内容被发布到 servlet。

HTML 代码:

<html>
<head>
<script type="text/javascript" src="./jquery.js"></script>
<link rel="stylesheet" type="text/css" href="jquery-ui.css" />
<script type="text/javascript" src="jquery-ui.js"></script>

<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>

<body>
    <div id="open-form">Upload your file</div>
    <div id="dialog-form" title="Select your file">
        <form id="uploadForm" action="./uploadFile "
            enctype="multipart/form-data" method="POST">
            <fieldset>
                <label for="name"><b>Filepath</b></label> <input type="file"
                    class="text ui-widget-content ui-corner-all" id="name" />
            </fieldset>
        </form>
    </div>

    <form action="./uploadFile" enctype=" multipart/form-data" method="POST">
        <div class="box2">
                Select your File</br> 
                <input type="file" name="Uploaded file"> 
                <input type="submit" class="button" value="Upload">
        </div>
    </form>

    <script type="text/javascript">
        $(function() {

            var name = $("#name"), allFields = $([]).add(name);
            $("#dialog-form").dialog({
                autoOpen : false,
                height : 300,
                width : 460,
                modal : true,
                buttons : {
                    "Upload" : function() {
                        document.forms["uploadForm"].submit();
                    },
                    Cancel : function() {
                        $(this).dialog("close");
                    }
                },
                close : function() {
                    allFields.val("").removeClass("ui-state-error");
                }
            });
            $("#open-form").click(function() {

                $("#dialog-form").dialog("open");

            });

        });
    </script>

</body>

在标签中添加 javascript 只是为了确定。这是servlet代码:

public void doPost(HttpServletRequest req, HttpServletResponse res) {
        try {           
            int formDataLength = req.getContentLength();
            byte dataBytes[] = new byte[formDataLength];
            DiskFileItemFactory factory = new DiskFileItemFactory();
            factory.setSizeThreshold(4096);
            factory.setRepository(new File("/location/y-folder"));
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setSizeMax(10000000);
            List fileItems = upload.parseRequest(req);           
            Iterator i = fileItems.iterator();
            FileItem fi = ((FileItem) i.next());
            InputStream inputStream = fi.getInputStream();
            String path = fi.getName();
            long h = fi.getSize();
            File f = new File("/location/x-folder"+path);
            OutputStream out = new FileOutputStream(f);
            int len;
            while ((len = inputStream.read(dataBytes)) > 0) {
                out.write(dataBytes, 0, len);
            }
            out.close();
            inputStream.close();

            System.out.println("Fi:-" + fi.toString());
}catch(Exception e){
system.out.println(e);
}
4

1 回答 1

1

在表单提交期间需要提交给服务器的所有输入元素都应该始终具有该name属性。

考虑以下行中的代码:

<label for="name"><b>Filepath</b></label> <input type="file"
     class="text ui-widget-content ui-corner-all" id="name" />

并将其更改如下:

<label for="name"><b>Filepath</b></label> <input type="file"
     class="text ui-widget-content ui-corner-all" id="name"
     name="Uploaded file" />
于 2012-12-07T06:05:38.890 回答