伙计们我正在使用inputStream进行文件下载。现在我想将fileName和fileType传递给DefaultStreamedContent。如何使用inputStream找到fileName和FileType。
InputStream inputStream = new BufferedInputStream(new FileInputStream(filePath));
fileDownload = new DefaultStreamedContent(inputStream,**fileType,fileName**);
答案 0 :(得分:4)
无法从InputStream
中提取此信息。此信息只能根据filePath
提取(并且在java.io.File
的帮助下很容易获取文件名)。
File file = new File(filePath);
InputStream inputStream = new FileInputStream(file);
String fileName = file.getName();
String fileType = FacesContext.getCurrentInstance().getEexternalContext().getMimeType(fileName);
fileDownload = new DefaultStreamedContent(inputStream, fileType, fileName);
ExternalContext#getMimeType()
根据<mime-mapping>
中的web.xml
条目确定。 servletcontainer已经有一大堆自己定义了(在Tomcat中,检查/conf/web.xml
)但你可以通过(重新)在webapp自己的/WEB-INF/web.xml
中定义它们来扩展和覆盖它,如下所示:对于XLSX类型:
<mime-mapping>
<extension>xlsx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>
</mime-mapping>