java - angularJs上传文件错误: The current request is not a multipart request

标签 java angularjs spring-mvc

我尝试使用 angularjs 上传文件,但有一个问题是“当前请求不是多部分请求”,我几乎尝试了谷歌的每个解决方案,但没有解决我的问题,我希望有人可以回答我的问题,谢谢。

这是我的 springMVC 配置

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="UTF-8"></property>
    <property name="maxUploadSize" value="5242880"></property>
</bean>

这是 html

<input type="file" id="file"/>
<button class="btn btn-primary" type="button" ng-click="uploadFile()">上传</button>

这是 Angular Controller

$scope.uploadFile = function () {
    uploadService.uploadFile().success(function (response) {
        if(response.success){
            $scope.image_entity.url = response.message;
        }else{
            alert(response.message);
        }
    })
}

这是 angular.service

this.uploadFile = function () {
    var formData = new FormData();
    formData.append("file", file.files[0]); //文件上传框的name
    return $http({
        url: "/upload.do",
        method: "post",
        data: formData,
        headers: {"Content-Type": undefined},
        transformRequest: angular.identity
    })
}

这是上传 Controller

@RequestMapping("/upload")
public ReturnResult upload(MultipartFile file){
    String fullName = file.getOriginalFilename(); 
    String extName = fullName.substring(fullName.lastIndexOf(".") + 1); 
    try {
        FastDFSClient client = new FastDFSClient("classpath:config/fdfs_client.conf");
        String fileId = client.uploadFile(file.getBytes(), extName);
        String url = file_server_url + fileId;  
        return new ReturnResult(true, url);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我看到谷歌浏览器发送

请求方式:POST

请求 header

内容类型:多部分/表单数据;边界=----WebKitFormBoundaryrzP8MUha8lcbDzdn

表单数据

------WebKitFormBoundaryrzP8MUha8lcbDzdn

内容处置:表单数据;名称="file";文件名=“1.jpg”

内容类型:图像/jpeg

------WebKitFormBoundaryrzP8MUha8lcbDzdn--

有问题吗?请帮助我。

最佳答案

我不确定根本原因。但我遇到了同样的问题,通过添加下面的代码解决了这个问题。尝试在您的配置中添加以下代码

@Bean
public MultipartResolver multipartResolver() {
    return new CommonsMultipartResolverMine();
}

public static class CommonsMultipartResolverMine extends CommonsMultipartResolver {

    @Override
    public boolean isMultipart(HttpServletRequest request) {
        final String header = request.getHeader("Content-Type");
        if (header == null) {
            return false;
        }
        return header.contains("multipart/form-data");
    }
}

关于java - angularJs上传文件错误: The current request is not a multipart request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58064492/

相关文章:

java - 使用 float 作为 map 的键

AngularJS $timeout 函数未在我的 Jasmine 规范中执行

java - 整个 Spring MVC Rest Controller 的 @JsonView 声明

javascript - AngularJs 不会呈现服务上更改的数据

java - 如何控制 UrlPathHelper#getOriginatingRequestUri

java - Spring Web 应用程序中 Controller 、服务、存储库的范围?

java - 在Java中读/写数字——转换时出现NumberFormatException

Java:父方法访问子类的静态变量?

带 GUI 的 Java 文字游戏。我的代码有什么问题吗?

angularjs - 当我尝试运行测试时得到 "Mismatched anonymous define() module..."