1.controller
package com.meeting.attachment.controller;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.URLEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import com.core.common.BaseController;
import com.core.model.Attachment;
import com.meeting.attachment.service.AttachmentService;
import com.utils.MeetingUtil;
@Controller
@RequestMapping("attachment")
public class AttachmentController extends BaseController {
@Autowired
AttachmentService attachmentService;
@RequestMapping(value="upload")
@ResponseBody
public Map<String, Object> uploadFiles(HttpServletRequest request){
Attachment attach = new Attachment();
Map<String, Object> map = new HashMap<String, Object>();
try {
String realPath = request.getSession().getServletContext().getRealPath("upload");
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int day = c.get(Calendar.DATE);
String dPath = "\\attach\\" + year + "\\" + month + "\\" + day + "\\"; // 用日期创建文件夹,防止重复
realPath += dPath;
File filePath = new File(realPath);
if(!filePath.exists()){
filePath.mkdirs();
}
List<String> list = new ArrayList<String>(); // 存放结果
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Iterator<String> iter = multipartRequest.getFileNames();
while (iter.hasNext()) {
MultipartFile file = multipartRequest.getFile(iter.next().toString());
if (file != null) {
String str = file.getOriginalFilename();
String suffix = str.substring(str.lastIndexOf("."));
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateStr = sdf.format(new Date());
String name = dateStr + UUID.randomUUID().toString().replaceAll("-", "");
String newFile = filePath + "\\" + name + suffix;
try {
file.transferTo(new File(newFile));
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
//保存附件信息到数据库
attach.setOriginal_name(str);
attach.setSave_name(name+suffix);
attach.setSave_path("upload\\"+dPath);
attach.setCreate_by(MeetingUtil.getLoginUserId(request));
attach.setCreate_time(new Date());
attach.setFile_type(suffix);
//attach.setMeeting_id(0L);
attachmentService.inserServlet(attach);
Long attachid = attach.getId();
list.add(newFile);
map.put("attachid", attachid);
}
}
}
request.setAttribute("path", list.get(0));
map.put("status", 200);
map.put("msg", "上传成功");
} catch (Exception e) {
map.put("status", 500);
map.put("msg", "上传失败");
}
return map;
}
@RequestMapping(value="download")
public void download(HttpServletRequest request,HttpServletResponse response,Long id) throws IOException{
Attachment attach = attachmentService.selectByPrimaryKey(id);
String realPath = request.getSession().getServletContext().getRealPath("upload");
realPath = realPath.substring(0, realPath.indexOf("upload"));
String savePath = attach.getSave_path();
String savename = attach.getSave_name();
//String webPath = request.getContextPath();
String path = realPath + "\\" + savePath + "\\" + savename;
String filename = attach.getOriginal_name();
filename = URLEncoder.encode(filename, "utf-8");
response.addHeader("Content-Disposition", "attachment;filename=" + filename);
response.setContentType("multipart/form-data");
FileInputStream in = new FileInputStream(path);
OutputStream out = response.getOutputStream();
int len = 0;
byte [] btyes = new byte[1024];
while((len = in.read(btyes)) > 0){
out.write(btyes,0,len);
}
in.close();
out.close();
}
}
2.实体类(列只出属性)
private Long id;
private String original_name;
private String save_name;
private String save_path;
private String file_type;
private Long obj_id;
private Long create_by;
private Date create_time;
private Long status;
private Long type; // 1message 2notes 3datum