p: Die Bean-Methode fileDownload wird aufgerufen, der Dateidownload wird jedoch nicht angezeigt

Hallo, ich führe einen Datei-Upload und -Download mit JSF und Primefaces durch.

Ich verwende Techniken aus verschiedenen Foren und Blogs (BelusCs Blog und Primefaces Showcase).

Die Hauptidee dieser Operation besteht darin, dem Benutzer das Hochladen einer Datei und das Generieren eines Download-Links für die hochgeladene Datei zu ermöglichen, damit er sie vor dem Senden herunterladen und anzeigen kann.

Hier ist mein Code:

index.xhtml

<h:form>
    <p:fileUpload showButtons="false" label="Attach Refrral" 
        auto="true" fileUploadListener="#{fileBean.uploadListener}"/>
</h:form>

<h:form >
   <p:commandLink>
      See Uploaded File
      <p:fileDownload value="#{fileBean.refrralFile}"/>
   </p:commandLink>
</h:form>

FileBean.java

private StreamedContent refrralFile;


    public void uploadListener(FileUploadEvent evt)throws Exception
    {
        UploadedFile fx = evt.getFile();

        File mainDir = new File("C:/","fileStorage");
        if(!mainDir.exists())
        {
            mainDir.mkdir();
        }
        File subDir = new File(mainDir,"AttachedRefrrals");
        if(!subDir.exists())
        {
            subDir.mkdir();
        }
        String fileName = fx.getFileName();

        File f = new File(subDir,fileName);
        FileOutputStream fos = new FileOutputStream(f);
        IOUtils.copy(fx.getInputstream(), fos);

        InputStream is = ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream(f.getAbsolutePath());
        refrralFile  = new DefaultStreamedContent(is, new MimetypesFileTypeMap().getContentType(f), fileName);

    }


    public StreamedContent getRefrralFile() {
        return refrralFile;
    }

Verwendung des obigen Codes Datei wird erfolgreich hochgeladen, aber wenn ich auf den Link zum Herunterladen der Datei klicke, wird die folgende Ausnahme ausgelöst:

java.lang.IllegalStateException: getOutputStream() has already been called for this response

ich benutzteFacesContext # responseComplete ()Wie bereits an vielen Stellen vorgeschlagen, funktioniert der Download-Link jetzt überhaupt nicht mehr.

Bitte korrigieren Sie mich, wenn ich mich in meiner Technik oder meinem Code irre, und schlagen Sie einen besseren Weg vor, wenn Sie es wissen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage