getAbsolutePath() как метод в UploadedFile(org.apache.myfaces.custom.fileupload.UploadedFile;)

В настоящее время я работаю над приложением, в котором пользователям предоставляется возможность просматривать и загружать файл 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.


person S Jagdeesh    schedule 09.12.2011    source источник


Ответы (2)


Зачем вам абсолютный путь к файлу? Что вы можете сделать с этой информацией? Создание 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.

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

person BalusC    schedule 09.12.2011
comment
Спасибо за прекрасное и точное объяснение BalusC. С моей стороны, должно быть, произошло серьезное недоразумение. Моя логика заключалась в том, что пользователь просматривает файл и нажимает кнопку загрузки. Он вызовет функцию readexcel() через интерфейс, который затем отправит полный путь к файлу в класс Java ExcelApache, где файл будет прочитан и проанализирован. fileName = new POIFSFileSystem (новый FileInputStream (файл)); - person S Jagdeesh; 10.12.2011
comment
Вы также можете просто использовать new POIFSFileSystem(inpFile.getInputStream()), если вам не нужна копия файла на диске. - person BalusC; 10.12.2011
comment
это должно работать как в Windows, так и в файловой системе unix? в приложении есть опция, в которой пользователям будет предложено загрузить файл документа excel/word, пользователь может находиться на любой платформе. Я просто уточняю. - person S Jagdeesh; 11.12.2011
comment
да. В конце концов, это всего лишь поток байтов. - person BalusC; 11.12.2011

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

person Averroes    schedule 09.12.2011
comment
Спасибо за ответ, Averroes. Моя настоящая цель состояла в том, чтобы прочитать файл excel с использованием библиотеки poi. Поскольку местоположение определяется во время выполнения кнопки обзора, я понимаю, что нужно отправить полный абсолютный путь для чтения файла. кажется, моей ЛОГИКЕ здесь не хватает логики :) - person S Jagdeesh; 10.12.2011