我正尝试使用AngularJS和REST(泽西岛)上传excel(.xlsx)文件。多部分边界被添加到REST收到的文件中,apache POI Library拒绝作为无效文件,但有以下例外情况。这个问题的解决方案是什么?REST上传Excel文件:使用多部分边界拒绝文件的POI库
org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:39)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:254)
at com.bt.ngwfmt.framework.rest.FileUploadHandler.fileUpload(FileUploadHandler.java:128)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Truncated. see log file for complete stacktrace
Caused By: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:203)
at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:673)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:274)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:254)
Truncated. see log file for complete stacktrace
When I add @FormDataParam instead of @RequestParam I get the following exception
java.lang.NullPointerException
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.unquoteMediaTypeParamete rs(MultiPartReaderClientSide.java:245)
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readMultiPart(MultiPartReaderClientSide.java:172)
at com.sun.jersey.multipart.impl.MultiPartReaderServerSide.readMultiPart(MultiPartReaderServerSide.java:80)
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:158)
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:85)
Java代码:
@POST
@Path("/uploadFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@NoCache
public String fileUpload(@RequestParam("file") InputStream inputStream) {
XSSFWorkbook myWorkBook = null;
XSSFSheet mySheet;
try {
myWorkBook = new XSSFWorkbook(inputStream); //The exception is thrown at this line)
} catch (IOException e) {
logger.error("Cant open workbook", e);
e.printStackTrace();
}
.....
角片断:
angular.module(appName).controller('fileUploadController',
[ '$scope', 'fileUpload', function($scope, fileUpload) {
$scope.uploadFile = function() {
var file = $scope.myFile;
console.log('file is ');
console.dir(file);
var uploadUrl = "myurl";
fileUpload.uploadFileToUrl(file, uploadUrl);
};
} ]);
angular.module(appName).directive('fileModel', [ '$parse', function($parse) {
return {
restrict : 'A',
link : function(scope, element, attrs) {
var model = $parse(attrs.fileModel);
var modelSetter = model.assign;
element.bind('change', function() {
scope.$apply(function() {
modelSetter(scope, element[0].files[0]);
});
});
}
};
} ]);
angular
.module(appName)
.service(
'fileUpload',
[
'$http',
function($http) {
this.uploadFileToUrl = function(file, uploadUrl) {
var fd = new FormData();
//
fd.append('file', file);
$http
.post(
uploadUrl,
fd,
{
transformRequest : angular.identity,
headers : {
'Content-Type' : "multipart/form-data" //"multipart/form-data"
}
}).success(function() {
}).error(function() {
});
}
} ]);
的问题是simil除了它特定于C#之外的其他链接。
您应该可能将您的java代码添加到您的问题 – 2016-04-21 10:53:29
这里是一个链接,显示如何使用Web服务上传文件...希望它可以帮助... http://howtodoinjava.com/jersey/jersey-file-upload - 例子/ – Abhishek
@RC。嗨,我已经添加了所有的细节。这是我在stackoverflow上的第一个问题,对不起。 – user3187479