私は、プライムフェイスfileUploadを微調整してgoogle appengineと連携させることが可能だと読んだことがあります。それはapacheのfileuploadとcommon ioを必要とするので、WEB-INF/libフォルダにcommons-fileupload-1.2.2.jarとcommons-io-1.3.2.jarを追加しました。プライムフェイスを取得するp:fileUploadをgoogle appengineの下で動作させる
その後primefacesの指示に従って、私は彼らのサーブレットを追加しました:
<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>
それはファイルをディスクに保存されたのではなく、それを保持されることにより、バイト数であるため、thresholdSizeが意図的に高い置かれますGoogle App Engineを使用してファイルを保存することはできないため、決して選択肢にはなりません。
次のように実際の使用方法は次のとおりです。
<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>
私はのcommandButtonは、AJAXを使用してはならないことを理解し、それは完全なページのリロードでなければならないことをしました。それは、私が問題なくファイルをアップロードさせるようですが、actionListenerは決して起動しません。
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)
...
私は私が何か間違ったことをやっているか、私は単に適切にこの仕事をするためにApacheのライブラリの適切なバージョンを取得していないかわからないんだけど。その後のcommandButtonを持つフォームを送信すると、例外がトリガされます。私が使用しているプライムフェイスのバージョンは3.2です。私がこの問題の解決策を探すとき、一般的な対応は、Google App Engineがファイルをディスクに保存しようとしているのが好きではなく、解決策は単にしきい値を上げることですが、しきい値はできるだけ高いので、をディスクに保存しようとするべきではありません。
私は何か助けや提案をいただきありがとうございます。特に解決策が明白であり、まだ見ていない場合は特にお勧めします。前もって感謝します。
誰かがこれをマークした理由についてコメントしていますか?私は自分の解決策を共有する必要はありませんでしたが、誰もが似たような状況にいるのを見ることができます。それは理想的ではないかもしれませんが、それは今のところ最高の解決策です。 – Neil