我尝试使用AngularJs上传2个文档。用户填写姓名,出生日期,性别等信息。如果这些数据通过弹簧控制器成功存储在数据库中,则应存储2个文件。
JS
以下代码用于添加和删除文档。
$scope.items = [];
$scope.item = {};
$scope.addItem = function (item)
{
if ($scope.item.file != undefined){
$scope.items.push( $scope.item);
$scope.item = {};
}
else {
alert("Please open a file before adding");
}
}
$scope.removeItem = function (item)
{
for (var i = 0; i < $scope.items.length; i++)
{
if ($scope.items[i] === item)
{
$scope.items.splice(i, 1);
break;
}
}
}
以下代码用于提交表单数据和文档。
$scope.submit = function()
{
var formData =
{
fullName : $scope.fullName,
fatherName : $scope.fatherName,
gender : $scope.gender,
contactNumber: $scope.contactNumber,
dateofbirth : $scope.dateofbirth,
subDate : new Date()
};
$http.post('userdetails', formData ).success(function(response)
{
if ($scope.items.length > 0)
{
for (var i = 0 ; i < $scope.items.length ; i++)
{
$scope.uploadItem(response.id, $scope.items[i]);
}
}
}).error(function(error)
{
alert(error);
});
};
$scope.uploadItem = function(id, file)
{
var data = new FormData();
data.append('id', id);
data.append('file', file);
$http.post('multipleSave', data, {
headers: { 'Content-Type': undefined,
enctype:'multipart/form-data' }
}).success(function(data) {
$log.debug("Upload Successfull");
}).error(function(error) {
$log.debug("Upload failure");
});
};
将存储第一个表单数据,如果成功,则应传递Documents。这里id是自动生成的,在存储表单数据之后从数据库返回。所有这些都是从前端单击发生的。
Spring Controller
@RequestMapping(value = "/multipleSave", method = RequestMethod.POST)
public @ResponseBody void uploadFile(MultipartHttpServletRequest request, HttpServletResponse response) throws IOException {
Iterator<String> fileName=request.getFileNames();
MultipartFile file= request.getFile(fileName.hasNext());
System.out.println("file");
}
在Spring配置中
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
我在调试模式下运行,我看到MultipartHttpServletRequest的内容为空。它没有收到任何文件。 对此有何帮助?
答案 0 :(得分:0)
你有所有的配置。只需将控制器更新到下面
@RequestMapping(value = "/multipleSave", method = RequestMethod.POST)
public @ResponseBody void uploadFile(@RequestParam("file") MultipartFile[] files) throws IOException {
for (int i = 0; i < files.length; i++) {
MultipartFile file = files[i];
// do something
}
}
上传的文件应从MultipartFile
的数组中提取,而不是从MultipartHttpServletRequest
获取。
如果您需要任何进一步的信息/帮助,请在评论中说明。
参考 - 请参阅here。
答案 1 :(得分:0)
我建议你的问题是在ajax标题中 - 我的工作实现的标题如下:
headers: {'Content-Type': undefined, 'Content-Transfer-Encoding': 'utf-8' }
您不应该同时使用内容类型和enctype。
另外,当我在spring-mvc中使用file.getOriginalFilename()方法时,它无法正常工作,因为表单名称编码是 iso-8859-1 。我认为,request.getFileNames()
也行不通。我使用了以下方法:
MultipartFile file = request.getFile("file");
String fileName = new String(file.getOriginalFilename().getBytes("iso-8859-1"),"UTF-8");
此外,我发现您要通过formdata.append
向档案附加其他参数。
没关系,但不要忘记使用单独的方法来获取params:从MultipartHttpServletRequest
通过request.getFile/getFiles
提取的文件,同时使用类似的东西提取其他参数:String id= request.getParameter("id");