使用SSM框架开发一个maven项目,在实现一个文件上传的功能时,发现前端传到后端Controller类进行解析的时候,request里面读出来的文件流为空——也就是这个文件没正确传到后端。
百思不得其解,求了解的朋友能够帮忙看一下。
下面是我的前端上传代码和后端解析代码。
<!-- 文件上传测试 -->
<div class="panel-body">
<form method="POST" class="form-horizontal" action="exam/uploadQuestions.html" enctype="multipart/form-data">
选择一个测试文件:<input type="file" name="uploadFile">
<input type="submit" name="uploadSubmit" value="上传">
</form>
</div>
Controller类方法。
/**
* 上传考试题目,返回包含了考试题目的main界面
* @param request
* @param response
* @return
* @throws IOException
*/
@RequestMapping(value="/uploadQuestions")
public ModelAndView uploadQuestions(HttpServletRequest request, HttpServletResponse response) throws IOException {
ModelAndView view = new ModelAndView("root/message");
System.out.println("开始上传文件至服务器");
DiskFileUpload diskFileUpload = new DiskFileUpload();//这个已经被废弃了,之后改成菜鸟教程的示例中的做法‘
try {
List<FileItem> list = diskFileUpload.parseRequest(request);//解析表单中每一个字段的数据,
//包装成独立的FileItem对象并且以List方式返回
System.out.println("准备遍历所有的FileItem...下面是表单field的name");
for(FileItem i:list) {
System.out.println(i.getFieldName());
}
//下面处理所有的FileItem
for(FileItem i:list) {
if(i.isFormField()) {
System.out.println("这是普通表单字段:"+i.getFieldName()+";"+i.getName());
}else {
System.out.println("这是文件表单字段:"+i.getFieldName()+";"+i.getName()+"; 准备进行保存");
//File remoteFile = new File(new String(i.getName().getBytes(),"UTF-8"));//获得要上传的文件的引用
File remoteFile = new File(i.getName());//不使用转换编码格式的话就可以传递文件名为中文的文件了
System.out.println("客户端文件位置:"+remoteFile.getAbsolutePath());
System.out.println("path:"+remoteFile.getPath()+"; name:"+remoteFile.getName());
//下面指定要把上面的remoteFile保存为?
File saveFile = new File(new String(remoteFile.getName()));
saveFile.createNewFile();
//下面把remoteFile的内容输出到saveFile
InputStream ins = i.getInputStream();//获得这个fileItem的输入流
OutputStream ous = new FileOutputStream(saveFile);//获得saveFile的输出流
byte[] buffer = new byte[1024];
int len=0;
while( (len=ins.read(buffer)) > -1) {
ous.write(buffer, 0, len);
System.out.println("文件已经保存到:"+saveFile.getAbsolutePath());
}
ous.close();
ins.close();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return view;
}