2016-03-19 32 views
0
package servlet; 


import java.io.File; 
import java.util.List; 
import java.util.Iterator; 
import java.util.*; 
import java.io.*; 



import java.io.IOException; 
import java.io.PrintWriter; 
import java.security.Security; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Properties; 
import java.util.Random; 

import javax.mail.Authenticator; 
import javax.mail.Message; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.MultipartConfig; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
import javax.servlet.http.Part; 

import database.DBAO; 
import model.Login; 



    /** 
    * Servlet implementation class SignupServlet 
    */ 
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB 
maxFileSize=1024*1024*10,  // 10MB 
maxRequestSize=1024*1024*50) 
@WebServlet("/SignupServlet") 
public class SignupServlet extends HttpServlet{ 
private static final long serialVersionUID = 1L; 
private static final String SAVE_DIR="images"; 
    /** 
* @see HttpServlet#HttpServlet() 
*/ 

public SignupServlet() { 
    super();  
} 

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 

     String savePath = "C:" + File.separator + SAVE_DIR; 
     File fileSaveDir=new File(savePath); 
     if(!fileSaveDir.exists()){ 
       fileSaveDir.mkdir(); 
      } 



     Random rand = new Random(); 
     int num = rand.nextInt(900000) + 100000; 
     String Password = Integer.toString(num); 

     String Name = request.getParameter("name"); 
     String Email = request.getParameter("email"); 
     String UserType = request.getParameter("usertype"); 
     String strDOB = request.getParameter("dob"); 
     String Gender = request.getParameter("gender"); 
     Part part = request.getPart("file"); 
     String fileName = part.toString(); 

     String filePath = savePath + File.separator + fileName; 
     part.write(savePath + File.separator + fileName); 



     java.sql.Date d; 

     SimpleDateFormat sdf; 
     sdf = new SimpleDateFormat("yyyy-MM-dd"); 
     java.util.Date d2 = null; 

     try{ 
      d2 = sdf.parse(strDOB); 
     } catch (ParseException e1) { 
      e1.printStackTrace(); 
     } 

     d = new java.sql.Date(d2.getTime()); 

     DBAO dbao = null; 
     Login login = null; 




     try {  


      // configuration for mail 
      Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 
      Properties props = System.getProperties(); 
       String host = "smtp.gmail.com"; 
       String port = "465"; 
       String fromEmail = "[email protected]"; 
       String username = "lookeverybodysg"; 
       String password = "catdog1234"; 

       props.put("mail.smtp.user", fromEmail); 
       props.put("mail.smtp.host", host); 
       props.put("mail.smtp.starttls.enable","true"); 
       props.put("mail.smtp.debug", "true"); 
       props.put("mail.smtp.auth", "true"); 
       props.put("mail.smtp.port", port); 
       props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
       props.put("mail.smtp.socketFactory.port", port); 
       props.put("mail.smtp.socketFactory.fallback", "false"); 


       Session mailSession = Session.getDefaultInstance(props, new javax.mail.Authenticator() { 

        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication("lookeverybodysg", "catdog1234"); // username and password 
        } 
       }); 
       mailSession.setDebug(true); 

       Message mailMessage = new MimeMessage(mailSession); 


      dbao = new DBAO(); 

       if (dbao.emailExists(Email)){ 
        request.setAttribute("Name", Name); 
        request.setAttribute("Email", Email); 
        request.setAttribute("UserType", UserType); 
        request.setAttribute("strDOB", strDOB); 
        request.setAttribute("Gender", Gender); 
        request.setAttribute("Pic", filePath); 


        response.setContentType("text/html"); 
        out.println("<script type=\"text/javascript\">"); 
        out.println("alert('The email you have used has already been regietered.');"); 
        out.println("location='Login.jsp#signup';"); 
        out.println("</script>"); 
        return; 
       }else{ 
        login = new Login(); 
        login.setName(Name); 
        login.setEmail(Email); 
        login.setPassword(Password); 
        login.setUserType(UserType); 
        login.setDOB(d); 
        login.setGender(Gender); 
        login.setPic(filePath); 

        boolean isUserSaved = dbao.saveNewUser(login); 

       if (isUserSaved){ 
        mailMessage.setFrom(new InternetAddress("[email protected]")); 
        mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(Email)); 
        mailMessage.setSubject("Thank You for signing up to LookEveryBody!"); 
        mailMessage.setContent("Email :" + Email + "<br> Password :" + Password, "text/html"); 

        Transport transport = mailSession.getTransport("smtps"); 
        transport.connect (host, 465, username, password); 

        transport.send(mailMessage); 

        response.setContentType("text/html"); 
        out.println("<script type=\"text/javascript\">"); 
        out.println("alert('Your accout has been successfully created, please go to your email to get your password.');"); 
        out.println("location='Login.jsp';"); 
        out.println("</script>"); 
        return; 
       } 

      } 

     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
} 
} 

我能够存储路径进入MySQL,但名字的图像文件是怪异,例如在链接:SQL转换部分转换成String

我明白,错误是特定于行:

Part part = request.getPart("file"); 
String fileName = part.toString(); 

任何帮助非常感谢,因为我现在正在进行我的最后一年项目。

+1

仅添加与该问题相关的代码。尽量缩短代码。 – Joe

回答

1

fileName很奇怪,因为Part类中的toString()方法。该类使用Object类的默认实现,该类打印jvm特定的实例ID。

可能您的Part类实现具有返回文件名的公共方法。试试这个:

String fileName = part.getSubmittedFileName((); 

相反的:

String fileName = part.toString(); 

您也可以选择让永诺人类可读fileName引入额外的属性为request

另外考虑自己生成文件名 - 例如获取随机UUID作为fileName。 UUID文件名生成将有助于防止名字在文件系统中的冲突(如果用户将提交什么两个不同的文件具有相同名称的?)

0

我管理由将此代码添加到解决错误:

private String extractFileName(Part part) { 
    String contentDisp = part.getHeader("content-disposition"); 
    String[] items = contentDisp.split(";"); 
    for (String s : items) { 
     if (s.trim().startsWith("filename")) { 
      return s.substring(s.indexOf("=") + 2, s.length()-1); 
     } 
    } 
    return ""; 
} 

但是,如果我想要托管此Web应用程序,我如何更改路径以便将其存储在Web项目的Web内容文件夹中。

+0

您的分拆问题在这里回答:http://stackoverflow.com/q/18664579 – BalusC

+0

我设法将其存储在网络内容文件夹,但现在我想要在浏览器上显示图像,所以我该怎么办? –

+0

阅读上面的链接,为什么你不应该这样做,其中的链接,你可以如何回馈它。 – BalusC