Ich habe gelesen, dass es möglich ist, primefaces fileUpload mit google appengine mit ein wenig Feinabstimmung zu arbeiten. Es erfordert Apache fileupload und common io, also habe ich commons-fileupload-1.2.2.jar und commons-io-1.3.2.jar zu meinem WEB-INF/lib-Ordner hinzugefügt.Getting primefaces p: fileUpload funktioniert unter google appengine
Dann folgen Sie die Anweisungen von primefaces, hat ich sich Servlet:
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
<init-param>
<param-name>thresholdSize</param-name>
<param-value>2147483647</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
Die thresholdSize gezielt hoch gesetzt werden, weil es die Anzahl von Bytes, mit denen die Datei nicht auf der Festplatte gespeichert werden, als es behält in Speicher, und da keine Dateien mit Google Appengine gespeichert werden können, kann es nie eine Option sein.
Die tatsächliche Nutzung ist wie folgt:
<h:form enctype="multipart/form-data">
<!-- Other text fields go here -->
<p:fileUpload fileUploadListener="#{tjBean.onHandleFileUpload}"
mode="advanced"
update=":toolbarForm:globalMessages"
sizeLimit="500000"
allowTypes="/(\.|\/)(txml)$/" />
<p:commandButton value="Okay" ajax="false" actionListener="#{tjBean.onSaveAction}" />
</h:form>
Ich habe verstanden, dass die Befehlsschaltfläche nicht Ajax verwenden müssen und dass es muss eine ganze Seite neu laden sein. Es scheint, als ob ich die Datei ohne Probleme hochladen kann, aber der actionListener wird nie ausgelöst. Das Einreichen dann das Formular mit dem Befehlsschaltfläche löst eine Ausnahme:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.commons.fileupload.disk.DiskFileItem
at org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
...
Ich bin nicht sicher, was ich tue etwas falsch oder ich habe einfach nicht die entsprechenden Versionen der Apache-Bibliotheken erhalten, um diese Arbeit richtig zu machen. Die Version von primefaces, die ich verwende, ist 3.2. Wenn ich nach einer Lösung für dieses Problem suchen, ist die allgemeine Antwort, dass Google Appengine nicht die Tatsache mag, dass ich versuche, eine Datei auf der Festplatte zu speichern, und die Lösung besteht einfach darin, den Schwellenwert zu erhöhen, aber der Schwellenwert ist so hoch wie es sein kann, so sollte es nicht einmal Versuch sein, um die Datei auf der Festplatte zu speichern.
Ich würde mich über jede Hilfe oder Vorschläge freuen, vor allem, wenn die Lösung offensichtlich ist und ich es noch nicht gesehen habe. Danke im Voraus.
Möchte jemand kommentieren, warum sie dies markiert haben? Ich musste meine Lösung nicht teilen, aber ich bin dafür, dass jeder sieht, wer sich in einer ähnlichen Situation befindet. Es ist vielleicht nicht ideal, aber es ist die beste Lösung bisher. – Neil