p:fileUpload上传的文件保存在哪里,如何更改?

时间:2012-08-06 14:09:28

标签: jsf netbeans file-upload glassfish primefaces

我使用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;

    }
}

2 个答案:

答案 0 :(得分:19)

默认情况下,它保存在servlet容器的内存或临时文件夹中,具体取决于文件大小和Apache Commons FileUpload配置(另请参阅{{3}中<p:fileUpload>章节的“过滤器配置”部分。 })。

你根本不应该担心这一点。 servlet容器和PrimeFaces确切知道它们的作用。您应该在命令按钮的操作方法中实际将上传的文件内容保存到 所需的位置。您可以按InputStream的{​​{1}}或UploadedFile#getInputStream()的{​​{1}}获取上传的文件内容(如果版面较大,则byte[]可能会占用大量内存文件,你知道,每个UploadedFile#getContents()吃一个字节的JVM内存,所以不要在大文件的情况下这样做。)

E.g。

byte[]

byte

<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); } } 来自Commons IO,无论如何你已经安装了它,以便FilenameUtils能够工作

要生成唯一的文件名,您可能会发现PrimeFaces User's Guide工具有用。

IOUtils

答案 1 :(得分:-1)

我使用简单模式,GlassFish 4.0和PrimeFaces 4.0

支持Bean

private UploadedFile file;
private String destination="C:\\temp\\";

public void upload() {

    System.out.println("uploading");
    if(file != null) {  
        System.out.println("the file is" +file);
        FacesMessage msg = new FacesMessage("Succesful" + file.getFileName() + " is uploaded.");  
        FacesContext.getCurrentInstance().addMessage(null, msg);  

        try {
           copyFile(file.getFileName(), file.getInputstream());
       }
       catch (IOException e) {
          e.printStackTrace();
       }
    }
    System.out.println("uploaf finished");
}  

public void copyFile(String fileName, InputStream in) {
    try {
        // write the inputStream to a FileOutputStream
        OutputStream out = new FileOutputStream(new File(destination + fileName));

        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = in.read(bytes)) != -1) {
             out.write(bytes, 0, read);
        }

        in.close();
        out.flush();
        out.close();

        System.out.println("New file created!");
    } catch (IOException e) {
       System.out.println(e.getMessage());
    }
}

JSF页面

<p:commandButton value="Submit" ajax="false" actionListener="#{staffController.upload}"/>