如何将使用 Dojo 上传程序选择的文件发布到 Dojo 1.7.5 的 servlet

How do I post a file selected using dojo Uploader to a servlet using Dojo 1.7.5

本文关键字:Dojo 文件发布 servlet 选择 程序      更新时间:2023-09-26

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

我在 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' 是空的或不是对象。因为我没有在我的代码中的任何地方使用长度。请你帮我解决这个问题。提前非常感谢。

这就是

使用 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;
}