Tej*_*ani 24 javascript ajax servlets file-upload multipart
我可以将文件作为multipart发送XMLHttpRequest到servlet吗?我正在制作一个表单并将其作为multipart提交,但不知何故我没有得到成功上传它的响应.我不希望刷新页面,因此必须由ajax进行.
Bal*_*usC 58
这只能用于XHR FormDataAPI(以前称为"XHR2"或"XHR Level 2",现在称为"XHR高级功能").
鉴于此HTML,
<input type="file" id="myFileField" name="myFile" />
Run Code Online (Sandbox Code Playgroud)
你可以上传如下:
var formData = new FormData();
formData.append("myFile", document.getElementById("myFileField").files[0]);
var xhr = new XMLHttpRequest();
xhr.open("POST", "myServletUrl");
xhr.send(formData);
Run Code Online (Sandbox Code Playgroud)
XHR将关注正确的标头并请求正文编码,并且该示例中的文件将在服务器端作为form-data名称的一部分提供myFile.
您需要记住,FormData旧版浏览器不支持API.在caniuse.com,您可以看到它目前已在Chrome 7 +,Firefox 3.5 +,Safari 5 +,IE 10+和Opera 12+中实现.
另一种方法是使用jQuery Form插件.您的整个表单在编写并正常运行时没有任何JavaScript代码行,然后将立即使用以下行进行调整:
$("#formId").ajaxForm(function(response) {
// Handle ajax response here.
});
Run Code Online (Sandbox Code Playgroud)
它还支持文件上传以及隐藏的iframe技巧.另请参阅此jQuery表单文档以获得深入解释.您可能只需要更改servlet代码就可以拦截正常(同步)和ajax(异步)请求.有关具体示例,请参阅此答案:使用JSP/Servlet和Ajax的简单计算器
无论哪种方式,上传的文件应该在servlet 的doPost()方法中可用,@MultipartConfig如下所示:
Part myFile = request.getPart("myFile");
Run Code Online (Sandbox Code Playgroud)
或者,如果您仍然使用Servlet 2.5或更早版本,请以通常的方式使用Apache Commons FileUpload.有关具体示例,请参阅此答案:如何使用JSP/Servlet将文件上载到服务器?