1、前台
前台可以使用$("#form").ajaxSubmit(function(result) {})方法提交表单,如下方式可以在当前页面不刷新不跳转的的状态下完成表单的提交。
//保存内容
function submitForm() {
if(confirm("是否确认办理延期申请?")) {
if(save()){
var url=webCfg.servePath + "/dcdbDelay/saveUpload";
$("#form").attr("enctype","multipart/form-data");
$("#form").attr("action",url);
//$("#form").attr("target","nm_iframe");
//$("#form").submit();
//alert("保存成功");
// jquery 表单提交
$("#form").ajaxSubmit(function(result) {
var data = $.parseJSON(result);
// 对于表单提交成功后处理,message为表单正常提交后返回的内容
if (data.status === true) {
alert("保存成功!");
$('#basis').css("color","black");
$('#delayDate').css("color","black");
}else{
alert(data.msg);
}
});
}
}
return false; // 必须返回false,否则表单会自己再做一次提交操作,并且页面跳转
}
2、后台
后台以SpringMVC处理文件的上传保存和下载。此处示例文件上传后保存在本地,实际项目中需要把文件保存到文件服务器上。
2.1 文件上传保存
/**
* 保存上传文件信息
* @param model
* @param request
* @param file
* @return
* @throws IOException
* @throws ParseException
*/
@RequestMapping(value = "/saveUpload", method = RequestMethod.POST)
@ResponseBody
public Object saveUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request,
HttpServletResponse response) throws IOException, ParseException {
response.setContentType("text/html;charset=utf-8");
//获取前台参数
String taskSubId = request.getParameter("taskSubId");
String delayId = request.getParameter("delayId");
JSONObject result = new JSONObject();
String fileName = file.getOriginalFilename();
fileId = UUID.randomUUID().toString();
if (fileName != null && !"".equals(fileName)) {
InputStream iso = file.getInputStream();
SaveFileFromInputStream(iso, "", fileName);
}
//保存信息至数据库(delayAO是实体类)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
DcdbTaskDelayAO delayAO = new DcdbTaskDelayAO();
delayAO.setId(delayId);
delayAO.setDcdbSubTaskId(taskSubId);
delayAO.setFileName(fileName );
delayAO.setFilePath("D:\\" + fileName);
delayAO.setFileId(fileId);
ServiceResult<Boolean> saveResult = dcdbTaskDelayService.saveOrUpdate(delayAO);
if (saveResult != null && saveResult.getData() == true) {
result.put("status", true);
result.put("msg", "保存成功");
} else {
result.put("status", false);
result.put("msg", "保存失败!");
}
return retString(result);
}
//保存上传的附件至服务器
public void SaveFileFromInputStream(InputStream is, String path, String filename) throws IOException {
FileOutputStream fs = new FileOutputStream(path + "D:\\" + filename);
byte[] buffer = new byte[1024 * 1024];
int bytesum = 0;
int byteread = 0;
while ((byteread = is.read(buffer)) != -1) {
bytesum += byteread;
fs.write(buffer, 0, byteread);
fs.flush();
}
fs.close();
is.close();
}
//JASON對象格式化
private Object retString(JSONObject result) {
String jsoStr = "";
try {
jsoStr = JSON.json(result);
} catch (IOException e) {
e.printStackTrace();
return jsoStr;
}
return jsoStr;
}
2.2文件的下载
文件的下载需要在前台提供一个可供使用的文件id,用于去数据库查询文件信息后下载。
/**
* 下载文件
* @param request
* @param filename
* @param filePath
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "/download", method = RequestMethod.GET)
public ResponseEntity<byte[]> downloadFile(HttpServletRequest request, @RequestParam("delayId") String delayId,
Model model) throws Exception {
ServiceResult<DcdbTaskDelayAO> saveResult = dcdbTaskDelayService.getById(delayId);
String filePath = saveResult.getData().getFilePath();
int startIndex = filePath.lastIndexOf("\\");
String filename = filePath.substring(startIndex + 1);
//下载文件路径
File file = new File(filePath + File.separator);
HttpHeaders headers = new HttpHeaders();
//下载显示的文件名,解决中文名称乱码问题
String downloadFielName = setFileName(request, filename);
//通知浏览器以attachment(下载方式)打开图片
headers.setContentDispositionFormData("attachment", downloadFielName);
//application/octet-stream : 二进制流数据(最常见的文件下载)。
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
}
/**
* 处理下载文件名编码问题;
* @param request
* @param response
* @param name
* @throws UnsupportedEncodingException
*/
public String setFileName(HttpServletRequest request, String fileName) throws UnsupportedEncodingException {
String agent = request.getHeader("USER-AGENT");
if (null != agent && -1 != agent.indexOf("MSIE") || null != agent && -1 != agent.indexOf("Trident")) {// IE
fileName = java.net.URLEncoder.encode(fileName, "UTF8");
} else if (null != agent && -1 != agent.indexOf("Mozilla")) {// 火狐,chrome等
fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
}
return fileName;
}