[英]Parsing ajax multiple file upload in grails controller
I have used FormData() for ajax multiple files upload. 我已经使用FormData()来上传多个文件。 In browser console, the list of files is shown but inside controller, the list is show as "[object File], [object File], [object FIle]" in string format. 在浏览器控制台中,显示了文件列表,但是在控制器内部,该列表以字符串格式显示为“ [对象文件],[对象文件],[对象文件]”。 How can I parse the values out of it? 如何解析其中的值? My javascript code is: 我的JavaScript代码是:
var form = jQuery("#upload-form").find('input[type="file"]');
var picData = new FormData();
var fl = form.get(0).files.length;
var files = [];
for (var i = 0; i < fl; i++) {
files.push(form.get(0).files[i]);
console.log(files); //The list files is shown
}
picData.append("filesList[]",files);
jQuery.ajax({
url: 'upload/fileSave',
type: 'post',
dataType:'json',
data:picData,
enctype:"multipart/form-data",
contentType:false,
processData:false,
success: function(data) {
}
});
I did JSON.parse(params.filesList[]) But it only outputs "object FIle" string. 我做了JSON.parse(params.filesList []),但它只输出“对象文件”字符串。 Should I do someting in javascript before I send it to controller? 在发送给控制器之前,应该在javascript中做点什么吗?
Normally inside controller, you can get file from request as: 通常在控制器内部,您可以从请求中获取文件,如下所示:
File file = request?.getFile('fileName')
But in your code, there are multiple files so you can iterate every file 但是在您的代码中,有多个文件,因此您可以迭代每个文件
File file0 = request?.getFile('filesList[0]')
File file1 = request?.getFile('filesList[1]')
You access like this in your controller action: 您可以在控制器操作中像这样访问:
for (filename in request.getFileNames()) {
MultipartFile fileContent = request.getFile(filename)
println "This file name" + filename
println "This file is file content" + fileContent
}
Hope this will help you !!!. 希望这个能对您有所帮助 !!!。
I did a workaround in this. 我对此做了一个解决方法。 I had to put each of the files in key value pairs before I passed it to backend. 我必须将每个文件放入键值对中,然后再传递给后端。
jQuery('#file-submit-save').click(function(){
var form = jQuery("#upload-form").find('input[type="file"]');
var picData = new FormData();
var fl = form.get(0).files.length;
for (var i = 0; i < fl; i++) {
picData.append("files["+i+"]", form.get(0).files[i]);
}
picData.append('fileSize',fl);
jQuery.ajax({
url: '/fileupload/ajaxSave',
type: 'post',
dataType:'json',
data:picData,
enctype:"multipart/form-data",
contentType:false,
processData:false,
success: function(data) {
}
});
}
});
Only then I could the multipart files associated with corressponding keys in backend. 只有这样,我才能在后端使用与对应密钥相关联的多部分文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.