我一直在寻找一种正确的方法将使用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语句是alonot prited。这给dojo.js上的JS错误 - &gt; 'length'为null或不是对象。我在代码中的任何地方都没有使用长度。 请你帮我解决这个问题。非常感谢。
答案 0 :(得分:2)
这是使用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;
}