使用ajax和rest web服务上传文件

Pra*_*ime 5 ajax rest jquery web-services

我正在使用 ajax 和 Rest Web 服务将文件上传到服务器。我已经捕获了文件上传事件并在 jquery 方法中获取了文件对象。我必须将文件对象发送到 Web 服务,以便我可以将文件保存到数据库。这是我的 jquery 代码..

  $scope.selectFile = function (fileObj) {
     if(fileObj!=undefined){
        $.ajax({
            url : "/RestServices/services/uploadFile",
            type : "POST",
            data : fileObj,
            processData: false,
            contentType: false,
            success : function(result) {
                $scope.$apply();
            },
            error : function(xhr, tStatus, err) {
                // alert(err);
            }
        });
     }
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用 FormData,但无法在 Web 服务中获取该文件。

    var formData = new FormData(); 
    formData.append("fileToUpload", fileObj);   

     if(fileObj!=undefined){
        $.ajax({
            url : "/RestServices/services/uploadFile",
            type : "POST",
            data : formData,
            processData: false,
            contentType: false,
            success : function(result) {
                $scope.$apply();
            },
            error : function(xhr, tStatus, err) {
                // alert(err);
            }

        });
Run Code Online (Sandbox Code Playgroud)

这是我的服务中的java代码

@POST
@Path("/uploadFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void uploadFile(File formData) {     
try {
        System.out.println(formData.getFileName());             
   } catch (Exception e) {
    LOGGER.error("Exception in Upload File Endpoint"+ e.getMessage());
}   
}
Run Code Online (Sandbox Code Playgroud)

如果我直接发送文件对象而不使用 formData,我会收到“媒体类型不支持错误”,如果我将 formData 发送到服务,我只会收到临时文件。ajax 和服务方法中应该有什么数据类型?如何在服务中获取上传的文件?任何帮助将不胜感激。

cha*_*apa 0

上传文件的方法与ajax请求确实不同。此外,考虑所有旧浏览器确实很难。幸运的是,其他人已经为我们解决了这个问题。

我建议使用 jQuery 插件,例如jQuery File Upload,或者使用Dropzone,这非常棒。