Java Spring MVC-在多部分HTTP Post中获取非多部分表单/数据
从我的客户端应用程序(AngularJS)中,我上传了一个文件和一些其他数据作为FormDataJava Spring MVC-在多部分HTTP Post中获取非多部分表单/数据,java,spring,spring-mvc,multipart,Java,Spring,Spring Mvc,Multipart,从我的客户端应用程序(AngularJS)中,我上传了一个文件和一些其他数据作为FormData var formData=new FormData(); formData.append("file",file.files[0]); //files formData.append("docData", angular.toJson($scope.docdata)); //invoice angular.toJson($scope.docda
var formData=new FormData();
formData.append("file",file.files[0]); //files
formData.append("docData", angular.toJson($scope.docdata)); //invoice
angular.toJson($scope.docdata)
的值类似于{“配置”:20,“标题”:“invoicedata”}
这是我的HTTP帖子
$http({
method: 'POST',
url: uploadurl,
headers: {'Content-Type': false},
data: formData,
transformRequest: function(data, headersGetterFunction) {
return data;
}
})
.success(function(data, status) {
alert("Error");
})
.error(function(data, status) {
alert("Error");
});
请求正在我的SpringMVC控制器中,我能够处理该文件。但是其他数据(docData
)我无法获取
这是我的UploadController.java
@Controller
public class UploadController {
@RequestMapping(value="/newDocument", method = RequestMethod.POST)
public void UploadFile(HttpServletRequest request, HttpServletResponse response) {
MultipartHttpServletRequest mRequest=(MultipartHttpServletRequest)request;
Iterator<String> itr=mRequest.getFileNames();
while(itr.hasNext()){
MultipartFile file=mRequest.getFile(itr.next());
String fileName=file.getOriginalFilename();
try {
File newFile = new File("/home/myHome/file-uploaded/"+fileName);
// if the directory does not exist, create it
if (!newFile.getParentFile().exists()) {
newFile.getParentFile().mkdirs();
}
FileCopyUtils.copy(file.getBytes(), newFile);
}
catch(FileNotFoundException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
Enumeration<String> parametrs = request.getParameterNames();
while(parametrs.hasMoreElements()) {
String param=parametrs.nextElement();
System.out.println("Param : " + param);
Object object=request.getAttribute(param);
System.out.println("Param Instance" + object.getClass().getName());
}
}
}
第63行引用了System.out.println(“参数实例”+object.getClass().getName())代码>
这意味着对象为空
如何获取值?当您使用多部分
时,表单字段将包含在请求流中。因此,您必须检查它们是否是表单字段
这就是我在servlet中使用的内容,您可以对其进行适当的更改以在springmvc
中工作
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart)
{
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try
{
List items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while (iterator.hasNext())
{
FileItem item = (FileItem) iterator.next();
if (item.isFormField()) //your code for getting form fields
{
String name = item.getFieldName();
String value = item.getString();
System.out.println(name+value);
}
if (!item.isFormField())
{
//your code for getting multipart
}
}
}
@ShijuKBabu我已经更新了我在servlet中使用的代码if(item.isFormField())
条件包含获取非多部分数据的代码。此处的上载是什么?
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart)
{
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try
{
List items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while (iterator.hasNext())
{
FileItem item = (FileItem) iterator.next();
if (item.isFormField()) //your code for getting form fields
{
String name = item.getFieldName();
String value = item.getString();
System.out.println(name+value);
}
if (!item.isFormField())
{
//your code for getting multipart
}
}
}