Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript REST上载Excel文件:POI库拒绝包含多部分边界的文件_Javascript_Java_Angularjs_Rest_Apache Poi - Fatal编程技术网

Javascript REST上载Excel文件:POI库拒绝包含多部分边界的文件

Javascript REST上载Excel文件:POI库拒绝包含多部分边界的文件,javascript,java,angularjs,rest,apache-poi,Javascript,Java,Angularjs,Rest,Apache Poi,我正在尝试用AngularJS和REST(Jersey)上传excel(.xlsx)文件。多部分边界将添加到REST中接收的文件中,apache POI库将其作为无效文件拒绝,但出现以下异常。这个问题的解决方案是什么 org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13

我正在尝试用AngularJS和REST(Jersey)上传excel(.xlsx)文件。多部分边界将添加到REST中接收的文件中,apache 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)

角度片段:

    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() {
                                    });
                        }
                    } ]);
这个问题与下面链接中的问题类似,只是它特定于C#


注释应该是
FormDataParam
,而不是
RequestParam
。如果仍然出现错误,请通过将文件写入临时位置来验证是否接收到该文件。当文件内容为空时,通常会出现此错误,在您的情况下更可能出现此错误

您可能应该在问题中添加java代码这里有一个链接,显示如何使用web服务上载文件。。。希望对你有帮助@RC。嗨,我已经添加了所有的细节。这是我关于stackoverflow的第一个问题,对不起。我正在获取边界后的数据,您可以在图像中看到它。我在本地复制了文件,并验证了边界内的数据是否相同。在“fileUpload”方法中,您是否将文件写入了临时位置,并且能够在没有错误的情况下打开它?关于FormDataParam的错误,您正在使用哪个版本的Jersey?我知道了。我正在使用以下Jersey JAR。jersey-bundle-1.19.jar jersey-core-1.19.jar jersey-multipart-1.19.jar
    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() {
                                    });
                        }
                    } ]);