Jersey上传接收请求元而不是文件

时间:2014-02-11 09:50:08

标签: angularjs file-upload glassfish jersey

我已经让这段代码运行良好,但是现在,稍后修改几次,当我回到它的上传功能时,它似乎只读取请求的元而不是实际文件。因此,例如,这是我在尝试上传txt文件时得到的结果:

  

------ WebKitFormBoundaryF5IARVFzqsY3zpj4Content-Disposition:form-data;名称= “文件” 未定义------ WebKitFormBoundaryF5IARVFzqsY3zpj4 -

JS:

$scope.setFiles = function(element) {
    $scope.$apply(function($scope) {
        console.log('files:', element.files[0]);
        // Turn the FileList object into an Array
        $scope.files = element.files[0];
        $scope.progressVisible = false;
    });
};

$scope.analyseFile = function() {
    var fd = new FormData();
    fd.append("file", $scope.files[0]);

    var xhr = new XMLHttpRequest();
    xhr.addEventListener("load", uploadComplete, false);
    xhr.addEventListener("error", uploadFailed, false);
    xhr.addEventListener("abort", uploadCanceled, false);
    xhr.open("POST", "/rest/analysisController/analyseFile");
    $scope.progressVisible = false;
    xhr.send(fd);
};

和服务器端:

@POST
@Path("analyseFile")
@Produces("application/json; charset=UTF-8")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response analyseFile(
        @FormDataParam("file") InputStream uploadedInputStream) throws
        RemoteException {

    System.out.println(getStringFromInputStream(
            uploadedInputStream));

    return Response.ok().build();
}

我还包括多部分依赖:

<dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.5.1</version>
        <scope>provided</scope>
    </dependency>

1 个答案:

答案 0 :(得分:1)

事实证明我的问题是切换到&#39; angular-file-upload.js&#39;的缩小版本。由于某种原因,缩小版本无法正常工作,因此它实际上并没有发送文件内容。

我不确定这个答案是否会真正帮助任何人,但以防万一。