какой файл эквивалентен ImageIO

1

Привет всем вам, экспертам по java.

У меня есть этот фрагмент кода, который я мог бы, наконец, собрать вместе: (это в основном java с небольшим ADF-кодом)

public String upload(){
    UploadedFile myfile = this.getFile();

    FacesContext fctx = FacesContext.getCurrentInstance();
    ServletContext servletCtx =
        (ServletContext)fctx.getExternalContext().getContext();
    String imageDirPath = servletCtx.getRealPath("/");
    String nomdefichier = myfile.getFilename();
    String mimetype = nomdefichier.substring(nomdefichier.length() - 3);
    try {
        InputStream inputStream = myfile.getInputStream();
        BufferedImage input = ImageIO.read(inputStream);

        File outputFile =
            new File( System.getProperty("user.home") + File.separator + this.path + File.separator + nomdefichier);         
        ImageIO.write(input, mimetype, outputFile);

    } catch (Exception ex) {
        // handle exception
    }
    FacesMessage message =
        new FacesMessage(mimetype + "Successfully uploaded file " + nomdefichier +
                         " (" + myfile.getLength() + " bytes)" + mimetype);
    fctx.addMessage(null, message);

    return null;

}

Эти коды загружают изображение просто отлично. Мне бы очень хотелось узнать, есть ли файл, эквивалентный ImageIO.write, чтобы я мог загружать PDF, DOCX и т.д.

Заранее благодарим за любой ответ.

С наилучшими пожеланиями.

Marc Arbor

  • 4
    Файлы просто байты. Вы можете загрузить любой файл с обычными потоками. Ваш пример кода создает ненужное создание BufferedImage , когда вы можете просто записать байты, которые вы получаете из входного потока, прямо на диск.
  • 0
    Не могли бы вы немного рассказать подробнее или указать мне на учебник, чтобы я мог научиться использовать не буферизованное изображение, а байты. Спасибо
Показать ещё 1 комментарий
Теги:
file
java-ee
oracle-adf
javax.imageio

2 ответа

2
Лучший ответ

Упрощенная версия вашего кода может быть записана следующим образом (исключая некоторые связанные с JSF вещи).

InputStream in = myFile.getInputStream();
Files.copy(in, Paths.get(yourPath));
  • 0
    Привет еще раз, Kayaman, ваш код работает, но кажется, что он удаляет пару байт в каждый загруженный файл, что приводит к повреждению моего PDF-файла. Что-то мне не хватает?
  • 0
    Там не так много, что может отсутствовать. Files.copy() обрабатывает вещи довольно автоматически. Сколько байтов не хватает?
Показать ещё 2 комментария
0

Вы можете написать массив байтов или InputStream в файл с классом java.nio.file.Files (начиная с Java 1.7).

// Saving data from an inputstream to a file:
Files.copy(inputStream, targetPath, copyOptions...);

// Saving a byte array to a file:
Files.write(path, byteArray, openOptions...);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню