我使用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;
}
}
答案 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}"/>