1

私は現在、ユーザーが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;
}

UI開発にはjsf2.0を使用し、参照ボタンにはTomahawkライブラリを使用しています。

参照ボタンのサンプルコード

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

アップロードボタンのサンプルコード

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

ここのロジック

参照ボタン->ユーザーは場所を参照してファイルを選択しますアップロードボタン->アップロードボタンをクリックすると、SampleInterfaceのメソッドreadExcelFileがトリガーされます。

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に表示/保存されます。

4

2 に答える 2

3

なぜ絶対ファイルパスが必要なのですか?この情報で何ができますか?作成しFileますか?申し訳ありませんが、WebサーバーがWebブラウザーとは物理的に異なるマシンで実行されている場合、それは絶対に不可能です。もう一度考えてみてください。さらに、適切なWebブラウザーは、ファイルの絶対パスに関する情報を送り返しません。

クライアントがすでに送信したアップロードされたファイルのコンテンツ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.

参照:

于 2011-12-09T12:23:21.877 に答える
0

過去にもこれに問題があったことを覚えています。私が間違っていなければ、ファイルをアップロードするときに完全なファイルパスを取得できないと思います。セキュリティ上の理由から、ブラウザはそれを教えてくれないと思います。

于 2011-12-09T09:11:03.977 に答える