2016-03-19 2 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Преобразование части в строку

Я понимаю, что ошибка особенно в строках:

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

Любая помощь очень ценится, так как у меня сейчас есть мой последний проект.

+1

Добавить только код, относящийся непосредственно к вопросу. Попробуйте сделать код коротким. – Joe

ответ

1

fileName странно из-за toString() метода в классе Part. Этот класс использует реализацию по умолчанию из класса Object, который печатает JVM-специфический идентификатор экземпляра.

Возможно, ваша реализация класса 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 ""; 
} 

Однако, если я хочу разместить это веб-приложение, как изменить путь, чтобы он хранился в папке веб-содержимого в моем веб-проекте.

+0

На ваш вопрос о spinoff ответили здесь: http://stackoverflow.com/q/18664579 – BalusC

+0

Мне удалось сохранить его в папке веб-содержимого, однако теперь я хочу отобразить изображение в браузере, так что мне делать? –

+0

Прочтите ссылку выше, почему вы не должны этого делать и ссылку в ней, как вы можете ее вернуть. – BalusC

Смежные вопросы