Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Как сделать так чтобы изображения хранились на жестком диске С  [new]
nastyaa
Member

Откуда:
Сообщений: 376
Они у меня хранятся в самом приложении (web/images)
А я хочу чтобы они хранились допустим - (Диск С/Pictures.....)

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package servlet;

import dao.DatabaseDAO;
import entity.Student;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;


@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
        maxFileSize = 1024 * 1024 * 10, // 10MB
        maxRequestSize = 1024 * 1024 * 50)   // 50MB
public class AddStudentServlet extends HttpServlet {

    /**
     * Name of the directory where uploaded files will be saved, relative to the
     * web application directory.
     */
    private static final String SAVE_DIR = "images";

    private DatabaseDAO dao;

    @Override
    public void init() throws ServletException {
        dao = new DatabaseDAO();
    }

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // gets absolute path of the web application
        String appPath = request.getServletContext().getRealPath("");

        // constructs path of the directory to save uploaded file
        String savePath = appPath + SAVE_DIR;

        // creates the save directory if it does not exists
        File fileSaveDir = new File(savePath);
        if (!fileSaveDir.exists()) {
            fileSaveDir.mkdir();
        }

        String name = request.getParameter("name");
        String surname = request.getParameter("surname");
        String fileName;

        for (Part part : request.getParts()) {
            String contentDisp = part.getHeader("content-disposition");
            String[] items = contentDisp.split(";");
            for (String item : items) {
                String ss = item.trim();
                if (ss.startsWith("filename")) {
                    try {
                        int id = dao.insertStudentIntoDB(name, surname);
                        fileName = String.valueOf(id);
                        part.write(savePath + File.separator + fileName);
                        request.setAttribute("message", "Студент добавлен.");
                    } catch (IOException e) {
                        request.setAttribute("message", "Ошибка при добавлении студента!");
                    }
                }
            }
        }

        List<Student> students = dao.readAllStudentsFromDB();
        request.setAttribute("students", students);
        request.getRequestDispatcher("ShowAllStudent.jsp").forward(request, response);
    }

    private String extractName(String s) {
        return s.substring(s.indexOf("=") + 2, s.length() - 1);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
}


package servlet;

import dao.DatabaseDAO;
import entity.Student;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

import static java.lang.Integer.parseInt;

import java.util.List;

public class MyServlet extends HttpServlet {

    private DatabaseDAO dao;

    @Override
    public void init() throws ServletException {
        dao = new DatabaseDAO();
    }

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

        String action = request.getParameter("actionname");

        if (action.equals("RemoveStudent")) {
            int id = parseInt(request.getParameter("id"));
            boolean deleted = dao.deleteStudentFromDB(id);

            String message;
            if (deleted) {
                message = "Студент удален.";
            } else {
                message = "Студент не существует";
            }
            request.setAttribute("message", message);

            List<Student> students = dao.readAllStudentsFromDB();
            request.setAttribute("students", students);

            request.getRequestDispatcher("ShowAllStudent.jsp").forward(request, response);
        }

        if (action.equals("ShowAllStudent")) {
            List<Student> students = dao.readAllStudentsFromDB();
            request.setAttribute("students", students);
            request.getRequestDispatcher("ShowAllStudent.jsp").forward(request, response);
        }
    }

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

        processRequest(request, response);
    }

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

        processRequest(request, response);
    }
}
15 мар 19, 08:34    [21833256]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
qi_ip
Member

Откуда:
Сообщений: 544
String appPath = "C:\\pictures"

не так?
15 мар 19, 08:40    [21833261]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
qi_ip
Member

Откуда:
Сообщений: 544
Еще пару вариантов:

File file = new File("Z:\\results\\results.txt");


String dirName = /* something to pull specified dir from input */;

String fileName = "test.txt";
File dir = new File (dirName);
File actualFile = new File (dir, fileName);

/* rest is the same */
15 мар 19, 08:42    [21833264]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
nastyaa
Member

Откуда:
Сообщений: 376
qi_ip,

Можете в моем коде это дописать я ваш код добавил но там ошибка у меня может не так пишу
15 мар 19, 08:45    [21833268]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
qi_ip
Member

Откуда:
Сообщений: 544
В конечном итоге, у вас должен быть путь:

String savePath = "C:\\pictures";
15 мар 19, 09:22    [21833295]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
qi_ip
Member

Откуда:
Сообщений: 544
А еще может быть ошибка из-за того, что винда не дает сохранить файл из Java именно на диске С, где находится система. Попробуйте сначала в другое место сохранить, например, на диск D
15 мар 19, 09:22    [21833298]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
nastyaa
Member

Откуда:
Сообщений: 376
qi_ip,
Я вот так написала, но там в той папке. Он хранит файл названная айди студента.
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package servlet;

import dao.DatabaseDAO;
import entity.Student;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;


@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
        maxFileSize = 1024 * 1024 * 10, // 10MB
        maxRequestSize = 1024 * 1024 * 50)   // 50MB
public class AddStudentServlet extends HttpServlet {

    /**
     * Name of the directory where uploaded files will be saved, relative to the
     * web application directory.
     */
    private static final String SAVE_DIR = "images";

    private DatabaseDAO dao;

    @Override
    public void init() throws ServletException {
        dao = new DatabaseDAO();
    }

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // gets absolute path of the web application
        String appPath = request.getServletContext().getRealPath("");

        // constructs path of the directory to save uploaded file
        
        
         String savePath = "C:/Pictures";
         File fileSaveDir = new File(savePath); {
                
            }
         if (!fileSaveDir.exists()) { fileSaveDir.mkdirs(); }

        // creates the save directory if it does not exists
        

        String name = request.getParameter("name");
        String surname = request.getParameter("surname");
        String fileName;

        for (Part part : request.getParts()) {
            String contentDisp = part.getHeader("content-disposition");
            String[] items = contentDisp.split(";");
            for (String item : items) {
                String ss = item.trim();
                if (ss.startsWith("filename")) {
                    try {
                        int id = dao.insertStudentIntoDB(name, surname);
                        fileName = String.valueOf(id);
                        part.write(savePath + File.separator + fileName);
                        request.setAttribute("message", "Студент добавлен.");
                    } catch (IOException e) {
                        request.setAttribute("message", "Ошибка при добавлении студента!");
                    }
                }
            }
        }

        List<Student> students = dao.readAllStudentsFromDB();
        request.setAttribute("students", students);
        request.getRequestDispatcher("ShowAllStudent.jsp").forward(request, response);
    }

    private String extractName(String s) {
        return s.substring(s.indexOf("=") + 2, s.length() - 1);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
}
15 мар 19, 09:35    [21833304]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
qi_ip
Member

Откуда:
Сообщений: 544
nastyaa,

ну правильно, вы же сами задаете это

int id = dao.insertStudentIntoDB(name, surname); - тут получает ID студента после инсерта в БД
fileName = String.valueOf(id);                            - тут присваиваете filename этот ID
part.write(savePath + File.separator + fileName);  - тут сохраняете в вашу папку файл с ID студента

я не совсем увидел, откуда Вы вообще изображение получаете.
15 мар 19, 09:41    [21833307]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
nastyaa
Member

Откуда:
Сообщений: 376
qi_ip,

Изображение из любой папки получаю, но как можно сделать так чтобы чисто изображение у меня сохранялось в той папке.
15 мар 19, 09:45    [21833313]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
qi_ip
Member

Откуда:
Сообщений: 544
nastyaa,

Вам нужно взять это изображение и передать типа вот так:

BufferedImage bImage = null;
File initialImage = new File("C://Users/Rou/Desktop/image.jpg");
bImage = ImageIO.read(initialImage); - тут записываете нужное вам изображение в буфер

-- а тут считываете из буфера и записываете в файл
ImageIO.write(bImage, "gif", new File("C://Pictures/image.gif")); ИЛИ ImageIO.write(bImage, "jpg", new File("C://Pictures/image.png")); ИЛИ ImageIO.write(bImage, "bmp", new File("C://Pictures/image.bmp"));
15 мар 19, 09:51    [21833326]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
nastyaa
Member

Откуда:
Сообщений: 376
qi_ip,

Можете в моем коде это добавить, боюсь что то не так сделать. Пожалуйста
15 мар 19, 09:57    [21833334]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
qi_ip
Member

Откуда:
Сообщений: 544
nastyaa, вряд ли, потому что я не вижу в какой момент и откуда должно появиться изображение, чтобы его передать в буфер.
15 мар 19, 10:06    [21833344]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
nastyaa
Member

Откуда:
Сообщений: 376
qi_ip,

Мой DAO
package dao;

import entity.Student;

import java.sql.*;
import java.time.LocalDate;
import java.util.ArrayList;

public class DatabaseDAO {

    private static final String URL = "jdbc:mysql://localhost:3306/school_db_newnew?useTimezone=true&serverTimezone=GMT";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";

    private static final String GET_ALL_STUDENTS_QUERY
            = "SELECT * FROM student;";

    private static final String INSERT_STUDENT_QUERY
            = "INSERT INTO student (name, surname) VALUES(?,?);";

    public static final String DELETE_STUDENT_QUERY = "DELETE FROM student WHERE id = ?;";

    private Connection conn;

    public DatabaseDAO() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    public ArrayList<Student> readAllStudentsFromDB() {
        ArrayList<Student> result = new ArrayList<>();

        try (PreparedStatement stmt = conn.prepareStatement(GET_ALL_STUDENTS_QUERY)) {
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                int id = rs.getInt("id");
                String firstName = rs.getString("name");
                String lastName = rs.getString("surname");
                String patron = rs.getString("patron");
                Date date = rs.getDate("birthday");
                LocalDate birthday = null;
                if (date != null) {
                    birthday = date.toLocalDate();
                }
                String image = rs.getString("image");
                Student student = new Student(firstName, lastName, patron, birthday);
                student.setId(id);
                student.setImage(image);
                result.add(student);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        return result;
    }

    public int insertStudentIntoDB(String name, String surname) {
        try (PreparedStatement stmt
                = conn.prepareStatement(INSERT_STUDENT_QUERY, Statement.RETURN_GENERATED_KEYS)) {

            stmt.setString(1, name);
            stmt.setString(2, surname);

            stmt.executeUpdate();
            ResultSet keys = stmt.getGeneratedKeys();
            if (keys.next()) {
                return keys.getInt(1);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return -1;
    }

    public boolean deleteStudentFromDB(int id) {
        try (PreparedStatement stmt = conn.prepareStatement(DELETE_STUDENT_QUERY)) {
            stmt.setInt(1, id);
            int rowsDeleted = stmt.executeUpdate();
            return rowsDeleted > 0;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}


Student
package entity;

import java.time.LocalDate;
import java.util.ArrayList;

public class Student {

    private int id;
    private String name, surname, patron;
    private LocalDate birthDate;
    private String image;
    private ArrayList<Grade> grades;

    public Student(String name, String surname, String patron, LocalDate birthDate) {
        this.name = name;
        this.surname = surname;
        this.patron = patron;
        this.birthDate = birthDate;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public String getSurname() {
        return surname;
    }

    public String getPatron() {
        return patron;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getShortName() {
        return surname + " " + name.charAt(0) + "." + (patron == null ? "" : " " + patron.charAt(0) + ".");
    }

    public LocalDate getBirthDate() {
        return birthDate;
    }

    @Override
    public String toString() {
        return getShortName();
    }
}
15 мар 19, 10:16    [21833356]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
Partisan M
Member

Откуда:
Сообщений: 1346
Настий,

Задавать строковые константы непосредстенно в Java-коде некультурно:
String savePath = "C:/Pictures";


ознакомьтесь с классами ServletConfig и ServletContext, с помощью которых можно получать в сервлете ресурс (например, строковое значение или файл) по имени ресурса.
15 мар 19, 10:18    [21833360]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
qi_ip
Member

Откуда:
Сообщений: 544
nastyaa,

вот в этом блоке Вы делаете сохранение файла, но лично мне не понятно/ не видно, как в этом блоке должно появиться изображение. Не понятно ОТКУДА он должно взяться, чтобы считать в буфер и сохранить на диск

for (Part part : request.getParts()) {
            String contentDisp = part.getHeader("content-disposition");
            String[] items = contentDisp.split(";");
            for (String item : items) {
                String ss = item.trim();
                if (ss.startsWith("filename")) {
                    try {
                        int id = dao.insertStudentIntoDB(name, surname);
                        fileName = String.valueOf(id);
                        part.write(savePath + File.separator + fileName);
                        request.setAttribute("message", "Студент добавлен.");
                    } catch (IOException e) {
                        request.setAttribute("message", "Ошибка при добавлении студента!");
                    }
                }
            }
        }
15 мар 19, 11:22    [21833448]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
nastyaa
Member

Откуда:
Сообщений: 376
qi_ip,
Мои JSP формы
      <div class="addstudent">
                <h1>Add Student</h1>
                <form action="AddStudent" method="Post" enctype="multipart/form-data">
                    name : <input type="text" name="name"><br><br>
                    surname : <input type="text" name="surname"><br><br>
                    image: <input name="data" type="file" accept="image/*"><br>
                    <input type="submit" value="Send"><br>
                </form>
            </div>
        </div>
    </body>
</html>
15 мар 19, 11:33    [21833473]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать так чтобы изображения хранились на жестком диске С  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 15540
nastyaa
Они у меня хранятся в самом приложении (web/images)
А я хочу чтобы они хранились допустим - (Диск С/Pictures.....)
тут вопрос поставлен не правильно
java может хранить где угодно. но вот чтобы отображать картинки в браузере - картинки должны быть в папке web.
правильный вопрос - как получить картинки из файловой систему используя тэг src?
вот тут ответ для tomcat/ 17269327
15 мар 19, 15:19    [21833955]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить