angularJS上传文件及表单
<form role="form">
<div class="form-group">
<label for="name">名称</label>
<input type="text" class="form-control" id="name"
placeholder="请输入名称">
</div>
<div class="form-group">
<label for="file">文件输入</label>
<input type="file" id="file" class="file">
</div>
<button type="submit" class="btn btn-default" ng-click="upload()">提交</button>
</form>
控制器部分获取文件和封装实体
var form = new FormData();
var file = angular.element("#file")[0].files[0];//取文件。用angular.element("#file")一定要引入jQuery。
form.append("fileName",file);
form.append("user",angular.toJson(user));//toJson将json对象转成字符串,放入实体
$http.post(url,form,{
**transformRequest: angular.identity,
headers:{
'Content-Type': undefined
}**
}).success(function (data) {
alert("true");
});
后台控制层代码如下:
@RequestMapping(value = "/operatorAppList/save.do", method = RequestMethod.POST)
public String saveUser(HttpServletRequest request,
HttpServletResponse response) throws Exception {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//获取表单数据
String userStr= multiRequest.getParameter("userInfo");
User user = (User) JSON.parseObject(userStr, User.class);
//获取文件
String saveUrl = "";
Iterator iter = multiRequest.getFileNames();
while (iter.hasNext()) {
String name = (String) iter.next();
CommonsMultipartFile file = (CommonsMultipartFile) multiRequest.getFile(name);
if (file != null) {
saveUrl = FileUtil.uploadFileToTemp(request, file);//上传到临时目录
String fileType = saveUrl.substring(saveUrl.lastIndexOf(".") + 1);
String fileName = saveUrl.substring(saveUrl.lastIndexOf('\\') + 1);
byte[] documentBytes = new byte[0];
try {
documentBytes = FileUtil.getBytes(saveUrl);
} catch (IOException e) {
e.printStackTrace();
}
//........保存数据库
}
}
response.getWriter().print(res);
return null;
}
FileUtil 文件类
public class FileUtil {
/**
* 反斜杠.
*/
public static final String speratorAnti = "/";
/**
* 删除文件.
*/
public static void deleteFile(String strDir) {
String targetPath = FileUtil.getWebContent() + strDir;
File file = new File(strDir);
if (file.exists()) file.delete();
}
/**
* 保存文件到temp(临时上传).
*/
public static String uploadFileToTemp(HttpServletRequest request, CommonsMultipartFile upload) {
if (!upload.isEmpty()) {
try {
// 保存的文件路径(如果用的是Tomcat服务器,文件会上传到/%TOMCAT_HOME%/webapps/YourWebProject/uploadTemp/文件夹中 )
String filePath = request.getSession().getServletContext()
.getRealPath("/") + "uploadTemp/";
String saveUrl = "uploadTemp/";
FileItem item = upload.getFileItem();
String fileName = item.getName();
filePath += fileName;
saveUrl += fileName;
File saveDir = new File(filePath);
if (!saveDir.getParentFile().exists())
saveDir.getParentFile().mkdirs();
// 转存文件
upload.transferTo(saveDir);
return request.getSession().getServletContext()
.getRealPath(saveUrl);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
return null;
}
/**
* 读取磁盘上文件内容,二进制
*/
public static byte[] getBytes(String filename) throws IOException {
File f = new File(filename);
if (!f.exists()) {
throw new FileNotFoundException(filename);
}
ByteArrayOutputStream bos = new ByteArrayOutputStream((int) f.length());
BufferedInputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(f));
int buf_size = 1024;
byte[] buffer = new byte[buf_size];
int len = 0;
while (-1 != (len = in.read(buffer, 0, buf_size))) {
bos.write(buffer, 0, len);
}
return bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
bos.close();
}
}
}