jQuery Ajax-Datei-Upload: Erforderlicher MultipartFile-Parameter 'file' ist nicht vorhanden
HINTERGRUN
Ich erstelle eine Spring MVC-Webanwendung auf Java8 und führe sie auf tomcat8 aus. Zusätzlich zu dieser Information ist die Frühlingsversion4.1.6.RELEASE
undServlet 3.1
Ich gebe Ihnen den Umgebungshintergrund, da einige Problemlöser angegeben haben, dass die Version mit diesem Fehler zusammenhängt.
MEIN CODE
Below ist dasroot-context.xml
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="20000000" />
</bean>
Below ist meinFileController
@Controller
public class FileController {
private static final Logger logger = LoggerFactory.getLogger(FileController.class);
private static final String UploadFolder = "Files";
@RequestMapping("/uploadFile")
@ResponseBody
public void uploadFile(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws IOException {
String fileName = "";
PrintWriter script = response.getWriter();
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
fileName = FilenameUtils.getName(file.getOriginalFilename());
String extension = FilenameUtils.getExtension(fileName);
String base = System.getProperty("catalina.home");
File dir = new File(base + File.separator + UploadFolder);
if (!dir.exists()) {
dir.mkdirs();
}
Date date = new Date();
String year = DateTimeUtility.getInstance().getYear(date);
String month = DateTimeUtility.getInstance().getMonth(date);
String uniqueFileName = DateTimeUtility.getInstance().getDateTime(date);
File dateDir = new File(base + File.separator + UploadFolder + File.separator + year + File.separator + month);
if (!dateDir.exists()) {
dateDir.mkdirs();
}
File uploadedFile = new File(dateDir.getAbsolutePath() + File.separator + uniqueFileName + WordCollections.UNDERBAR + fileName);
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(uploadedFile));
stream.write(bytes);
stream.close();
logger.info("Server File Location = " + uploadedFile.getAbsolutePath());
script.write("Uploading file was successful");
} catch (Exception e) {
logger.error("Server failed to upload this file : " + fileName);
script.write("Uploading file was failed");
}
} else {
logger.error("The requested file is empty");
script.write("Uploading file was empty");
}
}
Below ist meine Form
<form id="upload" method="POST" action="/uploadFile.json" enctype="multipart/form-data">
File to upload: <input type="file" name="file" onchange="MyScript.uploadFile(this);"><br />
<input type="submit" value="Upload"> Press here to upload the file!
</form>
KOMISCHE SACH
ist das Hochladen von Dateien überform submit
hat kein Problem. Es wirkt wie ein Zauber !! Ich habe nichts zu beanstandenform submit
!!
ABER DIESES AJAX UNTEN FUNKTIONIERT NICHT
$.ajax({
type: "POST",
url: "/uploadFile",
data: {name: "file", file: inputElement.files[0]},
contentType: 'multipart/form-data;boundary=----WebKitFormBoundary0XBBar2mAFEE8zbv',
processData: false,
cache: false,
/*beforeSend: function(xhr, settings) {
xhr.setRequestHeader("Content-Type", "multipart/form-data;boundary=gc0p4Jq0M2Yt08jU534c0p");
settings.data = {name: "file", file: inputElement.files[0]};
},*/
success: function (result) {
if ( result.reseponseInfo == "SUCCESS" ) {
} else {
}
},
error: function (result) {
console.log(result.responseText);
}
});
Wenn ich versuche, eine Datei mit dem obigen Ajax-Aufruf hochzuladen, gibt der Server diesen Fehler aus.
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'appServlet' processing POST request for [/uploadFile]
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /uploadFile
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public void com.company.web.controller.FileController.uploadFile(org.springframework.web.multipart.MultipartFile,javax.servlet.http.HttpServletResponse) throws java.io.IOException]
2015-04-07 18:37:30 DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'fileController'
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Resolving exception from handler [public void com.company.web.controller.FileController.uploadFile(org.springframework.web.multipart.MultipartFile,javax.servlet.http.HttpServletResponse) throws java.io.IOException]: org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver - Resolving exception from handler [public void com.company.web.controller.FileController.uploadFile(org.springframework.web.multipart.MultipartFile,javax.servlet.http.HttpServletResponse) throws java.io.IOException]: org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolving exception from handler [public void com.company.web.controller.FileController.uploadFile(org.springframework.web.multipart.MultipartFile,javax.servlet.http.HttpServletResponse) throws java.io.IOException]: org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'appServlet': assuming HandlerAdapter completed request handling
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.DispatcherServlet - Successfully completed request
Und der Browser sagt so etwas wie ...
<body><h1>HTTP Status 400 - Required MultipartFile parameter 'file' is not present</h1><div class="line"></div><p><b>type</b> Status report</p><p><b>message</b> <u>Required MultipartFile parameter 'file' is not present</u></p><p><b>description</b> <u>The request sent by the client was syntactically incorrect.</u></p><hr class="line"><h3>Apache Tomcat/8.0.20</h3></body></html>
Der Punkt ist Erforderlicher MultipartFile-Parameter 'file' ist nicht vorhanden und 400 Bad Request.
Ich habe mit diesem Keyword gegoogelt und so viel wie möglich gesucht, wie ich es immer getan habe, bevor ich eine Frage auf @ gestellt habstackoverflow
Ich verstehe es wirklich nicht, warum nurajax
funktioniert hier nicht !! Wenn Upload senden funktioniert gut.