使用jquery和Spring MVC上传二进制文件

时间:2014-10-13 19:13:22

标签: jquery spring spring-mvc

我正在尝试使用JQuery和Spring将文件上传到Web服务器 Web服务器是Tomcat 这适用于文本文件,但不适用于二进制文件 例如,上传JPG或PDF会生成无法打开的较大文件 我创建了一个非常简单的网页来演示问题:

<!DOCTYPE HTML>
<html>
    <head>
    <title></title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script type="text/javascript">
        function upload() {
            var post_data = new FormData();    
            post_data.append( 'file', $('input[type=file]')[0].files[0]);
            $.ajax({
                type: 'POST',
                url: '/rest/api/events/',
                cache: false,
                data: post_data,
                processData: false,
                contentType: false
            });  
        }
    </script>
    <body>
        <input type="file" name="file" id="file">
        <button id='uploadBtn' onclick='upload();'>Upload</button>
    </body>
</html>

控制器:

@RequestMapping(method = RequestMethod.POST, value = "/api/events")
@ResponseStatus(HttpStatus.OK)
public
@ResponseBody
Object addEvent(@RequestParam(value = "file", required = false) MultipartFile file) {
    try {
        file.transferTo(new File("C:\\" + file.getOriginalFilename()));
    } catch (IllegalStateException | IOException e) {
    }
    return "";
}

我做错了吗?

1 个答案:

答案 0 :(得分:0)

终于设法找到了问题。我的代码很好(您可以将其用作超简单文件上传测试的示例...),但是应用程序中有一个XSS过滤器,它将编码更改为UTF-8。删除此过滤器以解决此问题。