有没有办法用@PathVariable传递文件?

时间:2017-12-18 16:11:13

标签: javascript java ajax spring-mvc

我有一个从网址发布一些值的ajax帖子

var sendUrl = url + ',' + testId + ',' +questionId + ',' + questionRevision + ',' + result;   
 var ajaxData = {
                type: "POST",
                contentType : 'application/json; charset=utf-8',
                dataType : 'json',
                data: requestData,
                url: sendUrl,
                headers: headersData,
        };

并将它们绑定到@PathVariable,如下所示:

@RequestMapping(value="/answer,{testId},{qid},{qrev},{qres}", method = RequestMethod.POST)
    public @ResponseBody String answer(HttpServletRequest request, 
                            @RequestBody List<NokDataDTO> nokInfoDtos ,
                            @PathVariable("testId") Long testId,
                            @PathVariable("qid") Long qid,
                            @PathVariable("qrev") Integer qrev,
                            @PathVariable("qres") Integer qres) 

在这种情况下,有没有办法用@PathVariable传递图像文件? 我可以从这样的javascript获取上传的文件:

var fileVal=document.getElementById("fileLoader").files[0];

但找不到从RequestMapping绑定它的方法。

2 个答案:

答案 0 :(得分:0)

当您准备好将数据发送到服务器时,您可以使用element.files[0]属性从元素中获取文件,然后将其转换为base64字符串,该字符串可以像其他字符串一样发送到服务器值。

const file = document.getElementById("fileLoader").files[0];

const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
  // Post to server
  const base64Img = reader.result;
};
reader.onerror = function(error) {
  console.log('Error: ', error);
};

答案 1 :(得分:0)

我使用javascript FormData()找到了解决方案。 获取文件并将所有值附加到FormData并将其作为formData对象发布,如下所示:

   const file=document.getElementById("fileLoader").files[0];
        var fd = new FormData();
        fd.append('photo', file);
        fd.append('testId', testId);
         var ajaxData = {
            type: "POST",
            data: fd,
            processData : false,
            contentType : false,
            url: sendUrl,
            headers: headersData,
    };

并在后端,用param名称绑定它们:

@RequestMapping(value="/answer", method = RequestMethod.POST)
    public @ResponseBody String answer(HttpServletRequest request, 
            @RequestParam(value = "photo") MultipartFile photo,
            @RequestParam(value = "testId") String testId

它对我有用。