JavaMail上传多个附件时,用MultipartRequest 的getFileNames方法时无法获取文件名?

dream79 2008-04-10 10:50:00
我想在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();
}

}


...全文
863 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weipj007 2010-02-01
  • 打赏
  • 举报
回复
String to = "",subject="", from = "", cc = null, bcc = null;
String mailhost = "smtp.163.com";

String username = "";
String password = "";
Properties props = System.getProperties();
props.put("mail.smtp.auth", "true");
SMTPAuth auth = new SMTPAuth(username, password);
// could use Session.getTransport() and Transport.connect()
// assume we're using SMTP
if (mailhost != null)
props.put("mail.smtp.host", mailhost);

// Get a Session object
Session session = Session.getInstance(props, auth);
// if (debug)
// session.setDebug(true);

// construct the message
Message msg = new MimeMessage(session);
if (from != null)
msg.setFrom(new InternetAddress(from));
else
msg.setFrom();

msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
to, false));
if (cc != null)
msg.setRecipients(Message.RecipientType.CC, InternetAddress
.parse(cc, false));
if (bcc != null)
msg.setRecipients(Message.RecipientType.BCC, InternetAddress
.parse(bcc, false));

msg.setSubject(subject);

MimeBodyPart mbp1 = new MimeBodyPart();



MimeMultipart mp = new MimeMultipart("related");// alternative

//System.out.println("path= "+request.getRealPath("/")+"images\\2.jpg");

FileDataSource fds = new FileDataSource(request.getRealPath("/")+"images\\2.jpg");
MimeBodyPart mbp2 = new MimeBodyPart();
mbp2.setFileName(fds.getName());
mbp2.setText("1");
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setHeader("Content-ID", "<" + fds.getName() + ">");

FileDataSource fds3 = new FileDataSource(request.getRealPath("/")+"images\\1.jpg");
MimeBodyPart mbp3 = new MimeBodyPart();
mbp3.setFileName(fds3.getName());

mbp3.setText("2");
mbp3.setDataHandler(new DataHandler(fds3));
mbp3.setHeader("Content-ID", "<" + fds3.getName() + ">");


String html ="<html>"
+ "<head><title></title></head>"
+ "<body>"
+ "<p> see the following jpg !<br>"
+ "<a href=http://www.hundsun.com/a.jsp>hello</a><br>"
+ "<IMG SRC=cid:2.jpg ><br><IMG SRC=cid:1.jpg ><br>"
+ " <b> end of jpg</b>" + "</p>"+"</body>" + "</html>";

mbp1.setContent(html, "text/html");
mp.addBodyPart(mbp1,0);
mp.addBodyPart(mbp2,1);
mp.addBodyPart(mbp3,2);


msg.setContent(mp);

msg.setSentDate(new Date());
Transport.send(msg);
这是我成功的代码。
fanyuna 2010-01-27
  • 打赏
  • 举报
回复
// 宣告叙述上传档案内容的变数,型态为String
String FileDescription[] = {null,null,null};
String filename = null;
String contentType = null;
String description = null;
// 宣告叙述上传档案内容的数量,型态为String
int count=0;

// 产一个新的MultipartRequest 的物件,multi
MultipartRequest multi = new MultipartRequest(request , saveDirectory , maxPostSize ,"GBK");


//取得所有上传文件输入类型名称及描述
Enumeration filesname=multi.getFileNames();
Enumeration filesdesc=multi.getParameterNames();
while(filesname.hasMoreElements()){
String name=(String)filesname.nextElement();
String dc=(String)filesdesc.nextElement();
filename=multi.getFilesystemName(name);
contentType=multi.getContentType(name);
description=multi.getParameter(dc);
if(filename!=null){
count++;
%>

您上传第<%=count%>个文件:<br>
文件名称:<%=filename%> <br>
文件类型:<%=contentType %><br>
文件描述: <%=description %><br><br>

}
}



我是这样做的,你对比一下吧。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧