1.1.14.5.1.1.1. fejezet, fileUpload

Ha több értéket is küldünk a fájl feltöltés form-ban, a beviteli mezők értékei nem kerülnek feldolgozásra, ha a form mezőket nem dolgozza fel a szerver. Ennek elkerülésére alkalmazzuk a fileUpload process="@form" paraméterét:

<h:form id="fileUploadForm" enctype="multipart/form-data">
			<h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">
				<h:outputText value="Feltöltött fájl típus: " />
				<p:selectOneMenu id="contentType" value="#{fileUploadController.contentType}" disabled="#{not userFileInfoManager.isPasswordAccepted()}">
					<f:selectItem itemLabel="jpg kép" itemValue="image/jpg" />
					<f:selectItem itemLabel="szöveg fájl" itemValue="text/plain" />
					<f:selectItem itemLabel="html fájl" itemValue="text/html" />
					<f:selectItem itemLabel="video fájl" itemValue="video/mpeg" />
					<f:selectItem itemLabel="mp3 zene" itemValue="audio/mp3" />
					<f:selectItem itemLabel="Excel fájl"
						itemValue="application/vnd.ms-excel" />
					<f:selectItem itemLabel="Word fájl"
						itemValue="application/vnd.ms-word" />
					<f:selectItem itemLabel="egyéb"
						itemValue="application/octet-stream" />
				</p:selectOneMenu>
			</h:panelGrid>
 
			<p:fileUpload id="fileUploader"
				fileUploadListener="#{fileUploadController.upload}"
				disabled="#{not userFileInfoManager.isPasswordAccepted()}"
				process="@form" label="Választás" uploadLabel="Feltöltés"
				cancelLabel="Mégsem"
				invalidSizeMessage="A file túl nagy (max:#{fileUploadController.sizeLimit} byte)"
				invalidFileMessage="Ez a fájltípus nem megengedett" ajax="true"
				multiple="false" mode="advenced" auto="true"
				update=":growl,:fileListForm:dataPanel,:fileUploadForm"
				sizeLimit="#{fileUploadController.getSizeLimit()}" locale="hu" />
 
		</h:form>

Szerver oldalon pedig állítsuk a feldolgozást INVOKE_APPLICATION fázisba, majd az event.queue() metódussal kezdeményezzük a form újra értékelését:

    public void upload(FileUploadEvent event) {
        FacesMessage msg = null;
 
        if (!PhaseId.INVOKE_APPLICATION.equals(event.getPhaseId())) {
            event.setPhaseId(PhaseId.INVOKE_APPLICATION);
            event.queue();
        } else {
            InputStream fIn = event.getFile().getInputstream();
            ...
            fIn.close();
 
            UserFileInfo fileInfo = new UserFileInfo();
            fileInfo.setContentType(getContentType());
            fileInfo.setSize(event.getFile().getSize());
        }
    }

web.xml feltöltés vezérlő beállítás, ha saját parser-rel dolgozzuk fel az üzenetet, vagy utf-8 fájlneveket használunk:

	<context-param>
		<param-name>primefaces.UPLOADER</param-name>
		<param-value>commons</param-value>
	</context-param>

A fájl maximális méretét befolyásolhatja még a webszerver beállítása. Wildfly 10 esetén ez a max-post-size:

<http-listener name="default" max-post-size="25485760" redirect-socket="https" socket-binding="http"/>

Egy leírás SMB fájlrendszer elérésére itt.

CsatolmányMéret
Csomag ikon Homework4FileUpload.zip7.59 MB