gpt4 book ai didi

java - Spring MVC 4 AJAX上传带有额外参数的MultipartFile

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:54 27 4
gpt4 key购买 nike

我目前正在开发一个使用 AJAX (jQuery) 和 Spring MVC 4 的文件上传。除了文件本身之外,我还必须发送一些额外的参数,例如正在上传的文件的描述。我使用 $.ajax() 调用发送 FormData 对象以及我的 CSRF token ,如下所述:

var formdata = new FormData();
formdata.append("description", $('#description').val());
formdata.append("file", $("#file")[0].files[0]);

$.ajax({
url: '/upload',
type: 'POST',
headers : {"X-CSRF-TOKEN" : $('#myToken').val()}
data: formdata,
enctype: 'multipart/form-data',
processData: false,
contentType: false,
success: function (data) {
alert("Data Uploaded: "+data);
}
});

我发现了多个如何使用 javascript 的 FormData 对象以及接收 MultipartFile 对象的 Spring Controller 上传文件的示例,但是当我尝试使用 @RequestParam 检索其他参数时,我最终收到错误。以下是我尝试的示例(没有成功):

@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public boolean uploadFile(
@RequestParam(value = "file") MultipartFile file,
@RequestParam(value = "description") String description) {

//Do stuff...

}

经过大量研究并尝试不同的方法后,我发现我可以将 HttpServletRequest 声明为参数,并且它允许我检索每个参数(但不能检索文件本身)。 下面是一个工作示例:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public boolean uploadFile(
@RequestParam(value = "file") MultipartFile file,
final HttpServletRequest request) {

String description = request.getParameter("description");

//Do some other stuff...

}

尽管上面的示例有效,但我无法使用注释并且无法在方法签名中明确参数,这一事实困扰着我。因此,我尝试了一种不同的方法,将 @PRequestParam 注释更改为 @ModelAttribute 注释,结果出人意料地有效。

我的问题是:

  1. 如果可以在 HttpServletRequest 对象中检索参数,为什么 @RequestParam 不起作用?

  2. 为什么@ModelAttribute有效?我应该使用它而不是从 HttpServletRequest 显式检索内容吗?

最佳答案

这可能来得太晚了,但您可以将描述作为 url 中的参数传递:

url: '/upload?' + $.param({description: $('#description').val()});

别忘了问号!

对于数据,您只需传递实际文件:

data: $("#file")[0].files[0]

你的 Controller 将如下所示:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public boolean uploadFile(
@RequestParam(value = "file") MultipartFile file,
@RequestParam(value = "description") String description) {

//Do stuff...

}

希望有帮助!

关于java - Spring MVC 4 AJAX上传带有额外参数的MultipartFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com