0

私はこの機能を持っているliferayで働いています:

public class NewPortlet extends MVCPortlet {

public void abc(ActionRequest arq,ActionResponse ars) throws Exception {
    UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(arq);
    FileUploader fileUp = new FileUploaderImpl();
    fileUp.setFid(CounterLocalServiceUtil.increment("FileUploader.class"));
    File file = (File) uploadRequest.getFile("file");   
    byte[] bytes = FileUtil.getBytes(file);
    fileUp.setContent(Base64.objectToString(bytes));
    FileUploaderLocalServiceUtil.addFileUploader(fileUp);
}
}

File は com.liferay.portal.kernel.util.File のものです。上記の機能を使用して画像をアップロードしようとしています。画像をアップロードするための UI を取得し、送信をクリックすると次のエラーが表示されます。

ERROR [http-bio-8080-exec-37][render_portlet_jsp:154] java.lang.ClassCastException: java.io.File cannot be cast to com.liferay.portal.kernel.util.File
at com.test.image.test.NewPortlet.abc(NewPortlet.java:25)
at com.liferay.portal.kernel.portlet.LiferayPortlet.callActionMethod(LiferayPortlet.java:153)
at com.liferay.util.bridges.mvc.MVCPortlet.callActionMethod(MVCPortlet.java:250)
at com.liferay.portal.kernel.portlet.LiferayPortlet.processAction(LiferayPortlet.java:80)
at com.liferay.util.bridges.mvc.MVCPortlet.processAction(MVCPortlet.java:220)
at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:70)
at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:48)
at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530)
at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:534)
at com.liferay.portlet.InvokerPortletImpl.invokeAction(InvokerPortletImpl.java:579)

java.io.File を com.liferay.portal.kernel.util.File にキャストするにはどうすればよいですか?

4

2 に答える 2

0

直接的な答えは、「cosはインターフェイスjava.io.Fileのサブクラスではない」ということです。com.liferay.portal.kernel.util.File


com.liferay.portal.kernel.util.Fileしかし、本当の答えは、おそらくインターフェイスをまったく試してはならないということです。私が理解できることから、それはある種のユーティリティクラスのインターフェースです...明らかな実装クラスはありません。(率直に言って、なぜこのインターフェースが存在するのかまったく理解できません!)

実際、これを行うべきだと思います:

java.io.File file = ...
byte[] bytes = com.liferay.portal.kernel.util.FileUtil.getBytes(file);

または代わりに:

java.io.File file = ...
com.liferay.portal.kernel.util.FileUtil fu = 
            new com.liferay.portal.kernel.util.FileUtil();
byte[] bytes = fu.getBytes(file);

(完全修飾名は説明目的でのみ使用しています...)

これは、ここで見つけた Liferay 5.1 javadoc とソース コードに基づいています。YMMV。

于 2013-03-19T07:23:48.683 に答える
0

はインターフェイスを実装していないjava.io.Fileためcom.liferay.portal.kernel.util.File、 にキャストできません。java.io.Filecom.liferay.portal.kernel.util.File

AがB の場合にのみ、A を B にキャストできることに注意してください。

于 2013-03-19T06:44:10.347 に答える