[英]File upload using JSP and Jquery
我有一个要求,我需要提交一个包含使用ajax异步输入文件的表单。 以下是我编写的代码。 但这给了我错误。
<script>
function fileUpload()
{
var formData = $('#myform').serialize();
$.ajax({
type: "POST",
url: "second.jsp",
async: true,
data: formData,
contentType: "multipart/form-data",
processData: false,
success: function(msg) {
alert("File has been uploaded successfully");
},
error:function(msg) {
alert("Failed to upload file");
}
});
}
</script>
<form name="myform" id="myform" action="#" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Slide Name :</td>
<td><input type="text" name="filename"></td>
</tr>
<tr>
<td>Video File :</td>
<td><input type="file" name="filecontent"></td>
</tr>
<tr>
<td>Some input :</td>
<td><input type="radio" name="myinput" value="y" >Yes <input type="radio" name="myinput" value="n">No</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="button" value="Submit" onclick="fileUpload()"></td>
</tr>
</table>
</div>
</form>
<body>
<%
String fileLocation="D://";
if(ServletFileUpload.isMultipartContent(request)){
try {
List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : multiparts) {
if (item.isFormField()) {
String fieldName = item.getFieldName();
String fieldValue = item.getString();
} else {
String fieldName = item.getFieldName();
String fileName = FilenameUtils.getName(item.getName());
InputStream fileContent = item.getInputStream();
String name = new File(item.getName()).getName();
item.write(
new File(fileLocation + File.separator + name));
}
}
System.out.println("File Uploaded Successfully");
} catch (Exception ex) {
System.out.println("File Upload Failed due to " + ex);
}
}
%>
</body>
我收到的错误是:我在控制台中收到以下错误
File Upload Failed due to org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
我得到以下代码对我来说很好用:
function fileUpload()
{
$('#myform').attr('action', 'second.jsp');
$('#myform').ajaxSubmit({cache:false,success: function a(){
$('#myform').attr('action', '#');
}
});
}
感谢您的回应Felix
在您的代码中缺少此功能来捕获文件:
// Returns the uploaded File
Iterator iter = files.iterator();
FileItem element = (FileItem) iter.next();
完整的代码应如下所示。 我不会一步一步做很多事情。
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
//Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//Console Out Starting the Upload progress.
System.out.println("\n - - - UPLOAD");
// List of all uploaded Files
List files = upload.parseRequest(request);
// Returns the uploaded File
Iterator iter = files.iterator();
FileItem element = (FileItem) iter.next();
代替.serialize();
尝试这样做:
var form = document.getElementById('form-id');
var formData = new FormData(form);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.