web-dev-qa-db-ja.com

p:fileUploadのアップロードされたファイルはどこに保存され、どのように変更しますか?

Netbeansを使用した開発では、Primefacesの単純なファイルアップロードを使用します。私のテスト例は、Primefacesのマニュアルに似ています。
私の質問:ファイルはローカルコンピューターのどこにアップロードされますか?パスを変更するにはどうすればよいですか?Thx!

Jsfファイル:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://Java.Sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Page test</title>
    </h:head>
    <h:body>
        Hello! My first JSF generated page!
        <h:form enctype="multipart/form-data">
            <p:fileUpload value="#{fileBean.file}" mode="simple" />
            <p:commandButton value="Submit" ajax="false"/>
        </h:form>

    </h:body>
</html>

およびマネージドBean:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;


    @ManagedBean

@RequestScoped
public class FileBean {

    private UploadedFile file;

    public FileBean() {
    }

    public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;

    }
}
12
seinecle

デフォルトでは、ファイルサイズとApache Commons FileUpload構成に応じて、サーブレットコンテナのメモリまたは一時フォルダに保存されます( PrimeFacesユーザーズガイド)の_<p:fileUpload>_の章の「フィルタ構成」セクションも参照してください。 )。

これについてはまったく心配する必要はありません。サーブレットコンテナとPrimeFacesは、それらが何をするかを正確に知っています。コマンドボタンのアクションメソッドで、アップロードされたファイルの内容をyouの場所に実際に保存する必要があります。それが必要です。アップロードされたファイルの内容は、UploadedFile#getInputStream()によってInputStreamとして、またはUploadedFile#getContents()によって_byte[]_として取得できます(_byte[]_を取得することは潜在的にメモリです大きなファイルの場合は高価ですが、ご存知のとおり、各byteはJVMのメモリの1バイトを消費するため、大きなファイルの場合はそうしないでください)。

例えば。

_<p:commandButton value="Submit" action="#{fileBean.save}" ajax="false"/>
_

_private UploadedFile uploadedFile;

public void save() throws IOException {
    String filename = FilenameUtils.getName(uploadedFile.getFileName());
    InputStream input = uploadedFile.getInputStream();
    OutputStream output = new FileOutputStream(new File("/path/to/uploads", filename));

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

FilenameUtilsIOUtilsはCommons IOからのもので、_<p:fileUpload>_を取得するためにとにかくすでにインストールされている必要があります動作する)

一意のファイル名を生成するには、 File#createTempFile() 機能が役立つ場合があります。

_String filename = FilenameUtils.getName(uploadedFile.getFileName());
String basename = FilenameUtils.getBaseName(filename) + "_";
String extension = "." + FilenameUtils.getExtension(filename);
File file = File.createTempFile(basename, extension, "/path/to/uploads");
FileOutputStream output = new FileOutputStream(file);
// ...
_
19
BalusC