我有一个从网址发布一些值的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绑定它的方法。
答案 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
它对我有用。