【问题标题】:File is not being send or recieved from asynch XmlHttpRequest未从异步 XmlHttpRequest 发送或接收文件
【发布时间】:2017-09-10 13:59:56
【问题描述】:

我需要将图像发送到服务器,我使用的是 angular 2,所以请求必须是异步的。这是我用来在客户端发送图像的代码:

return Observable_1.Observable.create(function (observer) {
            var formData = new FormData();
            var xhr = new XMLHttpRequest();
            formData.append('image', image);
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        observer.next({ response: xhr.response, status: xhr.status });
                        observer.complete();
                    }
                    else {
                        observer.error({ response: xhr.response, status: xhr.status });
                    }
                }
            };
            xhr.open('POST', url, true);
            if (headers)
                for (var _i = 0, headers_1 = headers; _i < headers_1.length; _i++) {
                    var header = headers_1[_i];
                    xhr.setRequestHeader(header.header, header.value);
                }
            xhr.send(formData);
        });

我用来在服务器上处理请求的代码

@PostMapping(value = "/api/product/image", consumes = {"multipart/mixed", "multipart/form-data"})
    public ResponseEntity<ImageToken> postImage(MultipartHttpServletRequest request) throws ParseException {
        MultipartFile file = request.getFile(request.getFileNames().next());
        return imageService.saveImage("/products/", file);
    }

我真的不知道出了什么问题。处理程序正在被触发,但在 request.getFileName() 上抛出异常,我在调试器中看不到请求中的任何文件。

这是我的多部分解析器配置:

@Bean(name = "multipartResolver")
    public MultipartResolver multipartResolver(){
        CommonsMultipartResolver resolver =  new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        resolver.setMaxUploadSize(500000000);
        resolver.setMaxUploadSizePerFile(50000000);
        return resolver;
    }

我的 apache commons 和 spring boot 版本:

<parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>1.5.2.RELEASE</version>
        <relativePath />
    </parent>

<dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.2</version>
        </dependency>

【问题讨论】:

    标签: javascript spring-mvc spring-boot xmlhttprequest apache-commons-fileupload


    【解决方案1】:

    您可以通过指定一个多部分文件参数并使用部分名称对其进行注释来让 Spring 进行多部分检索:

    public ResponseEntity<ImageToken> postImage(@RequestPart("image") final MultipartFile file) {
    

    【讨论】:

    • 谢谢,我知道并且之前尝试过,但这并没有改变请求本身不包含任何文件的事实,尽管我可以在开发人员工具中看到它们正在发送 =(跨度>
    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 2016-01-18
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2011-05-17
    相关资源
    最近更新 更多