Ich erstelle einen E-Mail-Dienst mit Spring 4, wo der Benutzer mehrere Anhänge hochladen kann und die Eingaben von einer JSP-Seite kommen.@RequestParam konnte CommonsMultipartFile nicht finden attachFile []
die JSP-Seite:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Spring MVC - Email</title>
</head>
<body>
<h1>Spring MVC - Send e-mail with attachments</h1>
<form method="post" action="/sendEmail2" enctype="multipart/form-data">
Email To:
<input type="text" name="mailTo[]" size="65"/><br>
CC:
<input type="text" name="ccTo[]" size="65"/><br>
Subject:
<input type="text" name="subject" size="65"/><br>
Message:
<textarea cols="50" rows="10" name="message"></textarea><br>
From:
<input type="text" name="from" size="65"/><br>
Attach file:
<input type="file" name="attachFile[]" size="60"/><br>
<input type="submit" value="Send E-mail"/>
</form>
</body>
</html>
Der Controller:
@Controller
public class myController2 {
@Autowired
ReportingService2 service2;
@RequestMapping(value = "/sendEmail2", method = RequestMethod.POST)
public String sendEmail2(HttpServletRequest request,
@RequestParam CommonsMultipartFile attachFile[]
) {
String emailTo[] = request.getParameterValues("mailTo[]");
String ccTo[] = request.getParameterValues("ccTo[]");
String subject = request.getParameter("subject");
String msg = request.getParameter("message");
fromName = request.getParameter("from");
boolean res = service2.sendEmail(
emailTo, ccTo, subject, msg, attachFile,
fromName, username, password, hostName,
encoding, protocol, portNo, TLS,
sendPartial, SMTPAuth, SSL
);
if (res) {
return "/WEB-INF/Result";
} else {
return "errorpage";
}
}
Der Dienst für E-Mail:
@Service
public class EmailService2 implements ReportingService2 {
@Override
public boolean sendEmail(String[] toEmailAddresses, String[] toCc,
String subject, String message,
CommonsMultipartFile[] attachFile,
String fromName, String userName,
String password, String hostName,
String encoding, String protocol,
String portNo, boolean TLS, boolean sendPartial,
boolean SMTPAuth, boolean SSL) {
Properties mailProperties = new Properties();
if (SSL) {
// if SSL is used then port no should be 465
mailProperties.put("mail.smtp.ssl.enable", true);
mailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
mailProperties.put("mail.smtp.socketFactory.port", portNo);
mailProperties.put("mail.smtp.socketFactory.fallback", false);
} else if (TLS) {
//if TLS is used then port no should be 587
mailProperties.put("mail.smtp.starttls.enable", true);
}
if (SMTPAuth) {
mailProperties.put("mail.smtp.auth", true);
}
if (sendPartial) {
mailProperties.put("mail.smtp.sendpartial", true);
}
JavaMailSenderImpl javaMailSenderImpl = new JavaMailSenderImpl();
javaMailSenderImpl.setJavaMailProperties(mailProperties);
//if no TLS and no SSL then default port no is 25
javaMailSenderImpl.setPort(Integer.parseInt(portNo));
javaMailSenderImpl.setHost(hostName);
javaMailSenderImpl.setUsername(userName);
javaMailSenderImpl.setPassword(password);
javaMailSenderImpl.setDefaultEncoding(encoding);
javaMailSenderImpl.send(mimeMessage -> {
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, encoding);
messageHelper.setSubject(subject);
messageHelper.setText(message);
messageHelper.setFrom(fromName);
if (toEmailAddresses != null) {
for (String singleEmailTo : toEmailAddresses) {
messageHelper.setTo(singleEmailTo);
}
}
if (toCc != null) {
for (String singleCc : toCc) {
messageHelper.setCc(singleCc);
}
}
if (attachFile != null) {
for (CommonsMultipartFile singleFile : attachFile) {
messageHelper.addAttachment(singleFile.getOriginalFilename(), singleFile);
}
}
});
return true;
}
}
Jetzt, als ich habe ich den Dienst in der folgenden Art und Weise umgesetzt Führe das Projekt aus und triff das Mapping. Der Fehler, den ich bekomme, ist im Controller. Im Folgenden finden Sie die Fehlermeldung:
**HTTP Status 400 – Bad Request**
**Type** Status Report
**Message** Required CommonsMultipartFile[] parameter 'attachFile' is not present
**Description** The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
Apache Tomcat/8.5.23
Ich habe versucht, das Array von Anlagen in der folgenden Art und Weise zu erhalten, aber es sagt nicht kompatiblen Typ:
CommonsMultipartFile[] files=request.getParameterValues("attachFile[]");
Bitte helfen ...
Wie Sie diese Zuordnung treffen. Mit einem Rest-Client wie Postboten oder anderen Code verwenden? – pvpkiran
Ich treffe über meine JSP-Seite. Ich habe die obigen Implementierungscodes angegeben. – SAM
In Ihrem Controller-Benutzer '@RequestParam (" attachFile ")' Und kann ich wissen, warum Sie CommonsMultipartFile verwenden. Sie können stattdessen MultipartFile verwenden. Auch ich denke in deinem Jsp sollte es so sein wie 'name =" attachFile "'. Ich weiß nicht, Jsp. Nur eine Schätzung – pvpkiran