JavaMail上传多个附件时,用MultipartRequest 的getFileNames方法时无法获取文件名?
我想在JavaMail时,想利用MultipartRequest的getFileName方法来一次获取多个上传的文件名字时,得到的不是文件的名字,而是 input 的name属性,在网上找了一些文章,看了以后发现我的写法和他们的一样,可是为什么不能得到上传的文件名呢?希望能有高手来给解释一下.代码如下:
SendMail.html
<html>
<body>
<form action="sendMail" method="post" enctype="multipart/form-data">
From: <input type="text" name="from" ><br>
To: <input type="text" name="to"><br>
Subject: <input type="text" name="subject"><br>
Type <select name="type" size="1">
<option value="text/plain">文本</option>
<option value="text/html">网页</option>
</select><br>
file1<input type="file" name="file1" ><br>
file2<input type="file" name="file2"><br>
file3<input type="file" name="file3"><br>
Context<br>
<textarea rows="12" cols="60" name="context" ></textarea><br>
<input type="submit" value="Send"><br>
</form>
</body>
</html>
sendMail.java
public class sendMail extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gb18030");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("GB18030");
// 重新封装请求对象----Oreilly
MultipartRequest mreq = new MultipartRequest(request,".",5*1024*1024,"GB18030");
String from = mreq.getParameter("from");
String to = mreq.getParameter("to");
String subject = mreq.getParameter("subject");
String context = mreq.getParameter("context");
String type = mreq.getParameter("type");
// 获取附件中的文件名
//String fileName = mreq.getFilesystemName("fileName");
Enumeration files = mreq.getFileNames();
String to1 = "test1@ysu.com";
String to2 = "test2@ysu.com";
// 确定要发送的邮件服务器地址
String mailServer = "tdj";
// 设置邮件的传输协议
try{
Properties prop = System.getProperties();
prop.put("mail.smtp.host", mailServer);
prop.put("mail.smtp.auth","true");
PopupAuthenticator popAuthenticator = new PopupAuthenticator();
PasswordAuthentication pop = popAuthenticator.performCheck("tdj","911");
Session mysession=Session.getInstance(prop,popAuthenticator);
// 建立邮件发送的连接
//Session session = Session.getDefaultInstance(prop,null);
// 创建发送信息的载体
Message msg = new MimeMessage(mysession);
URLName url = new URLName("127.0.0.1:25");
mysession.setPasswordAuthentication(url, pop);
// 设置相关的邮件属性
msg.setFrom(new InternetAddress(from));
// 点到点的发送
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 如果处理文件上传
while(files.hasMoreElements()){
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(context,type+";charset=gb18030");//对于邮件的普通信息的处理
// 附件的处理
MimeBodyPart mbpFile = new MimeBodyPart();
String fileName = (String)files.nextElement();
FileDataSource fds = new FileDataSource(new File(fileName));
mbpFile.setDataHandler(new DataHandler(fds));
mbpFile.setFileName(MimeUtility.encodeText(fds.getName(), "gb18030","B"));
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbpFile);
msg.setContent(mp);
}
if(!files.hasMoreElements()){
// 设置邮件内容
msg.setContent(context,type+";charset=gb18030");
}
// 发送
Transport.send(msg);
}catch(Exception e){
e.printStackTrace();
out.println("Mail send failed!");
return;
}
out.println("Mail send success!");
out.flush();
out.close();
}
}