好的,我正在使用 javax.servlet-api-3.1.0。当我展开时,它清楚地显示 Part.class 和“getSubscribedFileName()。
但是我收到这个错误...
exception
javax.servlet.ServletException: java.lang.NoSuchMethodError: javax.servlet.http.Part.getSubmittedFileName()Ljava/lang/String;
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Eclipse java 代码中没有显示错误。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
<ui:composition>
<div id="colBottom">
<h:panelGroup>
<h:inputFile id="uploadFileId" image="/images/open.gif" value="# {mainBean.uploadFile}"/>
<h:commandButton value="Upload" action="#{mainBean.clickUpload}"/>
</h:panelGroup>
</div>
</ui:composition>
</h:body>
</html>
下面是尝试解析该部分的java代码。奇怪的是,我可以打开输入流并转换为文本。我需要能够确定该文件是否是 .zip 文件,以便 chilkat 可以解压缩它。
import javax.servlet.http.Part;
@ManagedBean(name="mainBean")
@SessionScoped
public class MainBean {
Part uploadFile;
String notesText;
public MainBean() {
}
public String clickUpload() {
try {
String fileName = Paths.get(getUploadFile().getSubmittedFileName()).getFileName().toString();
long uploadFileSize = getUploadFile().getSize();
InputStream is = getUploadFile().getInputStream();
byte[] uploadBytes = new byte[(int)uploadFileSize];
int bytesRead = is.read(uploadBytes);
setNotesText(new String(uploadBytes));
is.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
return "display";
}
我还是不明白为什么这个方法不起作用,但是
str = getUploadFile().getContentType();
...显示文件类型“application/x-zip-compressed”
这就是我所需要的。