我正在试图找到一种方法来获取上传的excel文件的作者。单击“上载”按钮后,我只能看到“byte[]contents”,我很困惑,无法找到上载文件的作者。当我运行下面的代码时,我得到了nopropertysetstreamexception。
public static Map<String, Boolean> validateFileSize(MultipartActionRequest request,
List<String> appCaseId) {
if (PortletFileUpload.isMultipartContent(request)) {
Map<String, List<MultipartFile>> multipartFiles;
multipartFiles = request.getMultiFileMap();
if (multipartFiles != null && !multipartFiles.isEmpty()) {
for ( List<MultipartFile> multipartFilesList : multipartFiles.values()) {
for ( MultipartFile item : multipartFilesList) {
byte[] contents;
try {
contents = item.getBytes();
try {
SummaryInformation si = (SummaryInformation)
PropertySetFactory.create(item.getInputStream());
si.getLastAuthor();
} catch (NoPropertySetStreamException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MarkUnsupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException ioe) {
}
1条答案
按热度按时间9rbhqvlz1#
主要有两种不同的类型
Microsoft Office
文件夹。旧二进制OLE2
文件(*.xls
,*.doc
,*.ppt
,…)和更新的Office Open XML
(OOXML
)文件(*.xlsx
,*.docx
,*.pptx
, ...).为了
OLE2
属性位于PropertySet
可以通过PropertySetFactory
. 但你需要正确使用它。这个InputStream
用于PropertySetFactory.create(java.io.InputStream stream)
不是注定要成为InputStream
整个文件的一部分。我想一定是DocumentInputStream
. 更好的方法是使用PropertySet.create(DirectoryEntry dir, java.lang.String name)
. 参见下面的示例。为了
OOXML
属性位于PackageProperties
可以从OPCPackage
.确定文件是否
OLE2
或者OOXML
,可以使用filemagic。FileMagic.valueOf(java.io.InputStream inp)
退货FileMagic.OLE2
或者FileMagic.OOXML
分别。下面的示例演示如何让作者离开
PropertySet
的OLE2
文件和文件PackageProperties
的OOXML
文件夹。这应该适用于各种Microsoft Office
哪个apache poi
支持。