getAbsolutePath (), как метод в UploadedFile (org.apache.myfaces.custom.fileupload.UploadedFile;) - PullRequest
0 голосов
/ 09 декабря 2011

В настоящее время я работаю над приложением, в котором пользователям предоставляется возможность просматривать и загружать файл Excel. Я ужасно застрял, чтобы получить абсолютный путь для просматриваемого файла. В качестве местоположения может быть что угодно (Windows / Linux).

import org.apache.myfaces.custom.fileupload.UploadedFile;
-----
-----
private UploadedFile inpFile;
-----
getters and setters    
public UploadedFile getInpFile() {
    return inpFile;
} 
@Override
public void setInpFile(final UploadedFile inpFile) {
    this.inpFile = inpFile;
}

мы используем jsf 2.0 для разработки пользовательского интерфейса и библиотеку Tomahawk для кнопки обзора.

Пример кода для кнопки просмотра

t:inputFileUpload id="file" value="#{sampleInterface.inpFile}" 
        valueChangeListener="#{sampleInterface.inpFile}" />

Пример кода кнопки загрузки

     <t:commandButton action="#{sampleInterface.readExcelFile}" id="upload" value="upload"></t:commandButton>

Логика здесь

Кнопка обзора -> пользователь выберет файл, просматривая местоположение Кнопка загрузки -> при нажатии кнопки загрузки, он вызовет метод readExcelFile в SampleInterface.

Файл реализации SampleInterface

public void readExcelFile() throws IOException {

        System.out.println("File name: " + inpFile.getName());
    String prefix = FilenameUtils.getBaseName(inpFile.getName()); 
    String suffix = FilenameUtils.getExtension(inpFile.getName());
        ...rest of the code
            ......
 }

Имя файла : abc.xls

префикс : abc

суффикс : xls

Пожалуйста, помогите мне получить полный путь (как в c: .....) просматриваемого файла, тогда этот абсолютный путь будет передан в класс excelapachepoi, где он будет проанализирован и содержимое будет отображено / сохранено в ArrayList.

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Зачем вам нужен абсолютный путь к файлу?Что вы можете сделать с этой информацией?Создание File?К сожалению нет, это абсолютно невозможно, если веб-сервер работает на физически другой машине, чем веб-браузер.Подумай еще раз об этом.Более того, правильный веб-браузер не отправляет информацию об абсолютном пути к файлу обратно.

Вам просто нужно создать File на основе содержимого загруженного файла , которое уже есть у клиентаотправлено.

String prefix = FilenameUtils.getBaseName(inpFile.getName()); 
String suffix = FilenameUtils.getExtension(inpFile.getName());
File file = File.createTempFile(prefix + "-", "." + suffix, "/path/to/uploads");

InputStream input = inpFile.getInputStream();
OutputStream output = new FileOutputStream(file);

try {
    IOUtils.copy(input, output);
} finally {
    IOUtils.closeQuietly(output);
    IOUtils.closeQuietly(input);
}

// Now you can use File.

Смотрите также:

0 голосов
/ 09 декабря 2011

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

...