Почему все файлы в моем приложении записываются в каталог jboss tmp? - PullRequest
1 голос
/ 19 марта 2012

У меня есть такая функция в моем Bean-компоненте:

public String uploadFile(UploadedFile uploadedFile) {
    logger.info("Enter: uploadFile(UploadedFile uploadedFile).");
    String name = uploadedFile.getName();
    String extension = name.substring(name.length() - 3);
    if (extension.contentEquals("peg")) {
        extension = "jpeg";
    }

    RandomString rs = new RandomString(RANDOM_PHOTO_NAME_LENGTH);
    this.randomPhotoName = rs.nextString();

    String fileName = this.randomPhotoName + "." + extension;
    logger.info("File name: " + name + ". Extension: " + extension + ". New fileName: " + fileName);
    ServletContext sc = (ServletContext) FacesContext.getCurrentInstance()
            .getExternalContext().getContext();

    File f = new File(
            sc.getRealPath(Constant.USER_FILE_PATH));
    if (!f.exists()) {
        logger.info("Folder "
                + Constant.USER_FILE_PATH
                + " nie istniej. Tworze nowy.");
        f.mkdirs();
    }
    File backupFile = new File(
            sc.getRealPath(Constant.USER_FILE_PATH
                    + fileName));

    InputStream in = null;
    OutputStream out = null;
    try {
        in = new BufferedInputStream(uploadedFile.getInputStream());
        out = new FileOutputStream(backupFile);

        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0)
            out.write(buf, 0, len);
    } catch (IOException ioe) {
        FacesContext context = FacesContext.getCurrentInstance();
        FacesMessage msg = null;
        msg = new FacesMessage(
                "Pojawił się nieoczekiwany błąd przy uploadowaniu pliku.");

        context.addMessage(null, msg);
        logger.error(
                "Pojawił się nieoczekiwany błąd przy uploadowaniu pliku.",
                ioe);
    } finally {
        try {
            in.close();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    logger.info("Exit: uploadFile(UploadedFile uploadedFile).");
    return fileName;
}

И все файлы сохраняются в каталоге tmp, например:

\jboss-5.1.0.GA\server\default\tmp\a006-czo4uq-gzzu4l42-1-gzzuk7xr-a2\TupTus.war\media\img\user-gallery\6u2fpgu3tkzniwg.JPG

1 Ответ

4 голосов
/ 19 марта 2012

Потому что все ваши файлы построены как:

File backupFile = new File(
            sc.getRealPath(Constant.USER_FILE_PATH
                    + fileName));

Похоже, sc.getRealPath() возвращает рабочий каталог, который JBoss выделяет для вашего приложения.

Итак, настоящий вопрос к вам: куда вы хотите записать файлы? Если нет, то где? Если вы предпочитаете пользовательский временный каталог, используйте new File(System.getProperty("java.io.tmpdir"), fileName) и пишите туда.

Если вы хотите иметь возможность настраивать путь из коробки, вы можете сохранить этот путь либо в БД, либо в файле конфигурации или передать его через пользовательские системные свойства, когда вы запускаете JBoss с помощью переключателя командной строки -D.

...