2

我一直在寻找一种将使用选择的文件发布dojox.form.Uploader到我的 servlet 的正确方法,但无法发布。似乎没有适合 dojo 的文档,也没有太多示例/演示/教程。回应将非常感谢。

我在 JSP 中的代码是

<tr>
    <td colspan="9"><h2>File Upload<br /></h2><h3>To add 800#s using a file</h3></td>
</tr>
<tr>
    <td colspan="9"><input type="file" data-dojo-type="dojox.form.Uploader" label ="Browse" multiple="false" id="uploader" onchange="check();" uploadOnSelect="true" url="/MyProject/app/ActionRequestHandlerServlet"/>
        <div id="files" data-dojo-type="dojox.form.uploader.FileList" uploaderId="uploader" ></div>
    </td>
</tr>`

Javascript代码包括以下

function check() {
    alert(dijit.byId("uploader").value);
    formPostObject.file = dijit.byId("uploader").value;
    sendFile();
}

function sendFile() {
    dojo.io.iframe.send({
        url: "/MyProject/app/ActionRequestHandlerServlet", // Replace with yours
        method: "post",
        handleAs: "text",
        form: dojo.byId("uploader"),
        load: function(response, ioArgs) {
            console.log("Upload OK", response, ioArgs);
            return response;
        },
        error: function(response, ioArgs) {
            console.log("Upload FAILED!!!", response, ioArgs);
            return response;
        }
    });
}

上面的代码没有给我任何回应。我的 servlet 中的 sysout 语句也没有打印。这会在 dojo.js 上出现 JS 错误 -> 'length' 为 null 或不是对象。因为我没有在代码中的任何地方使用长度。请你帮我解决这个问题。提前非常感谢。

4

1 回答 1

3

这就是使用 dojo 1.6 对我有用的方法,但这在 1.7 中应该没有什么区别,关键是 enctype="multipart/form-data" 需要 Servlet 3.0 才能实际工作。还有一个注释必须添加到 servlet @MultipartConfig

--- HTML --

dojo.require("dojox.form.Uploader");
dojo.require("dojox.form.uploader.FileList");
dojo.require("dojox.embed.Flash");
if(dojox.embed.Flash.available){
  dojo.require("dojox.form.uploader.plugins.Flash");
}else{
  dojo.require("dojox.form.uploader.plugins.IFrame");
}
</script>

<body>
<form method="post" action="ReadInputFilesServlet" id="myForm"
               enctype="multipart/form-data" >
 <fieldset>
    <input name="uploadedfile" multiple="true" type="file" id="uploader"
      dojoType="dojox.form.Uploader" label="Select Some Files" >
       <input type="submit" label="Submit" dojoType="dijit.form.Button" />
    <div id="files" dojoType="dojox.form.uploader.FileList"
                    uploaderId="uploader"></div>
 </fieldset>
</form>

--- 在 servlet 中 --

@MultipartConfig(location="C:\\TMP_FILES", fileSizeThreshold=1024*1024, maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        Collection <Part> files = request.getParts();
        Iterator <Part> iter = files.iterator();
        while(iter.hasNext()){
            Part part = iter.next();

            String filename = getFileName(part);

            System.out.println("File "+ filename);

            BufferedReader rd = new BufferedReader(new              InputStreamReader(part.getInputStream()));
            String line;
            while ((line = rd.readLine()) != null) {
            System.out.println(line);
            }
            rd.close();
        }

    }

public static String getFileName(Part filePart)
{
    String header = filePart.getHeader("content-disposition");
    for(String headerPart : header.split(";"))
    {
        if(headerPart.trim().startsWith("filename"))
        {
            return headerPart.substring(headerPart.indexOf('=') + 1).trim()
                             .replace("\"", "");
        }
    }
    return null;
}
于 2013-11-28T20:03:10.447 回答