java—如何使用jsf导入目录中的文件

zaqlnxep  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(372)

大家好,我对java开发还不熟悉,对此我很困惑。我在做一个web应用程序,我的问题是如何导入文件并将其放入i目录。我已经创建了xhtml文件:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:jsf="http://xmlns.jcp.org/jsf"
    xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
    xmlns:p="http://primefaces.org/ui"
    template="/WEB-INF/template/template.xhtml">
<ui:define name="title">2G</ui:define>

    <ui:define name="content">
    <h:form>

    <h1> <font color="orange" size="7" > 2G</font></h1> 

    </h:form>
    <h2 >Choose 2 files </h2>
    <h:form>
            <p:fileUpload fileUploadListener="#{import_2G.save()}"
                mode="advanced" dragDropSupport="true" update="messages"
                sizeLimit="100000000000" allowTypes="/(\.|\/)(xls)$/" />

            <p:growl id="messages" showDetail="true" />
        </h:form>

</ui:define>
</ui:composition>

这是bean文件:

@ManagedBean
@RequestScoped
public class Import_2G {
    public Import_2G() { }
    @EJB
    private GestionCellRef2GLocal gestionCellRef2GLocal;

    private UploadedFile uploadedFile;

    public void save() throws IOException {
        GestionCellRef2GRemote t = null;

            Path folder = Paths.get("C:\\Upload");
            String filename = FilenameUtils.getBaseName(uploadedFile.getFileName());
            String extension = FilenameUtils.getExtension(uploadedFile.getFileName());
            Path file = Files.createTempFile(folder, filename + "-", "." + extension);
            if (file != null) {
                FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " was uploaded.");
                FacesContext.getCurrentInstance().addMessage(null, message);
            }

            try (InputStream input = uploadedFile.getInputstream()) {
                Files.copy(input, folder, StandardCopyOption.REPLACE_EXISTING);

    }
    }

}

有人帮忙吗?

x6492ojm

x6492ojm1#

首先开始阅读java中的命名约定。如果你不尊重命名惯例,使用下划线、分数之类的东西,你会有一些麻烦。
第二,你忘了 enctype . 当您要上载二进制数据时,必须将以下属性: enctype="multipart/form-data ". 让我们建立一个文件上传。
首先填写表格:

<h:form enctype="multipart/form-data">
    <p:fileUpload value="#{import2G.file}"
                  mode="advanced" dragDropSupport="true"
          sizeLimit="100000000"
          allowTypes="/(\.|\/)(xls)$/"
          update="messages"
          fileUploadListener="#{import2G.save}" />
</h:form>

<p:growl id="messages" showDetail="true" />

还有你的后盾:

public void save(FileUploadEvent e) {
    FileUpload file = event.getFile();
    String fileName = file.getFileName();
    String contentType = file.getContentType();
    byte[] content = file.getContents();
    saveFile(content);
}

private void saveFile(byte[] data) {
    FileOutputStream fos = new FileOutputStream(DIR_NAME);
    fos.write(data);
    fos.close();
}

从形式上看听众;使用 import2G.save 相反 import2G.save() ,这是因为 FileUpload parameter 在运行时传递给侦听器。

相关问题