Package com.barsoft.memepost.servlets

Source Code of com.barsoft.memepost.servlets.AddPostServlet

package com.barsoft.memepost.servlets;

import com.barsoft.memepost.entities.Post;
import com.barsoft.memepost.entities.User;
import com.barsoft.memepost.entities.Users;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.RequestContext;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext;

public class AddPostServlet extends HttpServlet {

    private Random random = new Random();
   
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //проверяем является ли полученный запрос multipart/form-data
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (!isMultipart) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }

        // Создаём класс фабрику
        DiskFileItemFactory factory = new DiskFileItemFactory();

        // Максимальный буфера данных в байтах,
        // при его привышении данные начнут записываться на диск во временную директорию
        // устанавливаем один мегабайт
        factory.setSizeThreshold(1024 * 1024);

        // устанавливаем временную директорию
        File tempDir = (File) getServletContext().getAttribute("javax.servlet.context.tempdir");
        factory.setRepository(tempDir);

        //Создаём сам загрузчик
        ServletFileUpload upload = new ServletFileUpload(factory);

        //максимальный размер данных который разрешено загружать в байтах
        //по умолчанию -1, без ограничений. Устанавливаем 10 мегабайт.
        upload.setSizeMax(1024 * 1024 * 10);

        Post p = new Post();

        try {
            RequestContext ctx = new ServletRequestContext(request);
            final List items = upload.parseRequest(ctx);
            Iterator iter = items.iterator();



            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();

                if (item.isFormField()) {
                    //если принимаемая часть данных является полем формы           
                    if (item.getString() != null && !item.getString().equals("")) {
                        processFormField(item, p);

                    } else {
                        request.setAttribute("message", "Title shouldn't be empty!");
                        final RequestDispatcher rd = getServletContext().getRequestDispatcher("/protected/addpost.jsp");
                        rd.forward(request, response);
                        return;
                    }
                } else {
                    //в противном случае рассматриваем как файл
                    if (!item.getName().contains(".jpg") && !item.getName().contains(".png") && !item.getName().contains(".bmp") && !item.getName().contains(".jpeg")) {
                        request.setAttribute("message", "Only .png, .jpg, .jpeg, .bmp. files allowed!");
                        final RequestDispatcher rd = getServletContext().getRequestDispatcher("/protected/addpost.jsp");
                        rd.forward(request, response);
                        return;
                    } else if (item.getName() != "") {
                        processUploadedFile(item, p);

                    } else {
                        request.setAttribute("message", "No file selected!");

                        final RequestDispatcher rd = getServletContext().getRequestDispatcher("/protected/addpost.jsp");
                        rd.forward(request, response);

                        return;
                    }
                }
            }

        } catch (Exception e) {
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            return;
        }

        User curuser = (User) request.getSession().getAttribute("curuser");
        Users users = (Users) this.getServletContext().getAttribute("users");
        ((List<Post>) users.getUsers().get(curuser)).add(p);

        response.sendRedirect(request.getContextPath() + "/home.jsp");
    }

    /**
     * Сохраняет файл на сервере, в папке upload. Сама папка должна быть уже
     * создана.
     *
     * @param item
     * @throws Exception
     */
    private void processUploadedFile(FileItem item, Post p) throws Exception {
        File uploadedFile = null;
        //выбираем файлу имя пока не найдём свободное
        Date curdate = Calendar.getInstance().getTime();
        SimpleDateFormat ft = new SimpleDateFormat("ddMMyyyyHHmmss");
        String uploadToPath = "upload/" + Math.abs(random.nextInt(1024 * 1024)) + "_" + ft.format(curdate) + ".jpg";
        String path;
        do {
            path = getServletContext().getRealPath(uploadToPath);
            uploadedFile = new File(path);
        } while (uploadedFile.exists());

        //создаём файл
        uploadedFile.createNewFile();
        //записываем в него данные
        item.write(uploadedFile);

        p.setMemUrl(uploadToPath);
        p.setDate(Calendar.getInstance().getTime());
    }

    /**
     * Выводит на консоль имя параметра и значение
     *
     * @param item
     */
    private void processFormField(FileItem item, Post p) {
        p.setText(item.getString());
    }
}
TOP

Related Classes of com.barsoft.memepost.servlets.AddPostServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.