文档管理需求如题。
Entity:
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import org.apache.commons.lang3.builder.ToStringBuilder;
- @Entity
- public class Document {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- public Long id;
- public String name;//文件名
- public String alias;//别名
- public String documentPath;//上传文件(文件存储位置)
- public String lable;//标签
- public String remark;//备注
- //get set方法
- }
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.apache.commons.lang3.builder.ToStringBuilder;
@Entity
public class Document {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
public String name;//文件名
public String alias;//别名
public String documentPath;//上传文件(文件存储位置)
public String lable;//标签
public String remark;//备注
//get set方法
}
Service:
- import java.io.*;
- import java.lang.reflect.InvocationTargetException;
- import java.util.*;
- import javax.persistence.*;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.beanutils.BeanUtils;
- import org.carrot.domain.Document;
- import org.carrot.repository.DocumentDao;
- import org.carrot.util.FileUtil;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.Pageable;
- import org.springframework.data.jpa.domain.Specification;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.web.multipart.MultipartFile;
- import com.google.common.collect.Lists;
- import com.google.common.collect.Maps;
- @Service
- public class DocumentService {
- @Autowired
- private DocumentDao documentDao;
- @Transactional
- public List<Document> upload( MultipartFile[] newfiles,Document document,HttpServletRequest request) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
- List<Document> list = new ArrayList<Document>();
- for (MultipartFile newfile : newfiles) {
- Document fileX = new Document();
- if (newfile.getSize() > 0) {
- document.documentPath = request.getSession().getServletContext().getRealPath("upload/");
- document.name = newfile.getOriginalFilename();
- BeanUtils.copyProperties(fileX,document);
- list.add(fileX);
- try {
- FileUtil.uploadFile(newfile.getBytes(), document.documentPath, document.name);
- documentDao.save(fileX);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- return list;
- }
- @Transactional
- public Object download(HttpServletResponse response,HttpServletRequest request,Long id) throws IOException{
- Document document = documentDao.findOne(id);
- if (document != null) {
- //是从"upload\下获取文件 然后下载到C:\\users\\downloads即本机的默认下载的目录
- String realPath = request.getSession().getServletContext().getRealPath("upload/");
- File file = new File(realPath, document.name);
- if (file.exists()) {
- response.setContentType("application/force-download");// 设置强制下载不打开
- response.addHeader("Content-Disposition","attachment;fileName=" + document.name );// 设置文件名
- byte[] buffer = new byte[1024];
- FileInputStream fis = null;
- BufferedInputStream bis = null;
- OutputStream os = null;
- try {
- fis = new FileInputStream(file);
- bis = new BufferedInputStream(fis);
- os = response.getOutputStream();
- int i = bis.read(buffer);
- while (i != -1) {
- os.write(buffer, 0, i);
- i = bis.read(buffer);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- return null;
- }
- @Transactional(readOnly = true)
- public Map<String,Object> search( String searchValue, Pageable pageable) {
- HashMap<String, Object> maps = Maps.newHashMap();
- Page<Document> pageRecharge = documentDao.findAll(new Specification<Document>() {
- public Predicate toPredicate(Root<Document> root, CriteriaQuery<?> query, CriteriaBuilder cb) { // 根据条件获取任务列表
- //按document类里的字段实现模糊搜索
- Path<String> palias = root.get("alias");
- Path<String> pname = root.get("name");
- Path<String> plable = root.get("lable");
- List<Predicate> predicates = Lists.newArrayList();
- if (searchValue != null) {
- Predicate p1 = cb.like(palias,"%"+searchValue+"%");
- Predicate p2 = cb.like(pname,"%"+searchValue+"%");
- Predicate p3 = cb.like(plable,"%"+searchValue+"%");
- Predicate p = cb.or(p3,cb.or(p1),cb.or(p2));
- predicates.add(p);
- }
- Predicate[] predicateArr = new Predicate[predicates.size()];
- query.where(predicates.toArray(predicateArr));
- return null;
- }
- }, pageable);
- maps.put("total", pageRecharge.getTotalElements());
- maps.put("list", pageRecharge.getContent());
- return maps;
- }
- }
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import javax.persistence.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.carrot.domain.Document;
import org.carrot.repository.DocumentDao;
import org.carrot.util.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@Service
public class DocumentService {
@Autowired
private DocumentDao documentDao;
@Transactional
public List<Document> upload( MultipartFile[] newfiles,Document document,HttpServletRequest request) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
List<Document> list = new ArrayList<Document>();
for (MultipartFile newfile : newfiles) {
Document fileX = new Document();
if (newfile.getSize() > 0) {
document.documentPath = request.getSession().getServletContext().getRealPath("upload/");
document.name = newfile.getOriginalFilename();
BeanUtils.copyProperties(fileX,document);
list.add(fileX);
try {
FileUtil.uploadFile(newfile.getBytes(), document.documentPath, document.name);
documentDao.save(fileX);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return list;
}
@Transactional
public Object download(HttpServletResponse response,HttpServletRequest request,Long id) throws IOException{
Document document = documentDao.findOne(id);
if (document != null) {
//是从"upload\下获取文件 然后下载到C:\\users\\downloads即本机的默认下载的目录
String realPath = request.getSession().getServletContext().getRealPath("upload/");
File file = new File(realPath, document.name);
if (file.exists()) {
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition","attachment;fileName=" + document.name );// 设置文件名
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
OutputStream os = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return null;
}
@Transactional(readOnly = true)
public Map<String,Object> search( String searchValue, Pageable pageable) {
HashMap<String, Object> maps = Maps.newHashMap();
Page<Document> pageRecharge = documentDao.findAll(new Specification<Document>() {
public Predicate toPredicate(Root<Document> root, CriteriaQuery<?> query, CriteriaBuilder cb) { // 根据条件获取任务列表
//按document类里的字段实现模糊搜索
Path<String> palias = root.get("alias");
Path<String> pname = root.get("name");
Path<String> plable = root.get("lable");
List<Predicate> predicates = Lists.newArrayList();
if (searchValue != null) {
Predicate p1 = cb.like(palias,"%"+searchValue+"%");
Predicate p2 = cb.like(pname,"%"+searchValue+"%");
Predicate p3 = cb.like(plable,"%"+searchValue+"%");
Predicate p = cb.or(p3,cb.or(p1),cb.or(p2));
predicates.add(p);
}
Predicate[] predicateArr = new Predicate[predicates.size()];
query.where(predicates.toArray(predicateArr));
return null;
}
}, pageable);
maps.put("total", pageRecharge.getTotalElements());
maps.put("list", pageRecharge.getContent());
return maps;
}
}
Dao:
- import org.carrot.domain.Document;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.Pageable;
- import org.springframework.data.jpa.domain.Specification;
- import org.springframework.data.jpa.repository.JpaRepository;
- public interface DocumentDao extends JpaRepository<Document,Long> {
- Page<Document> findAll(Specification<Document> specification,Pageable pageable);
- }
import org.carrot.domain.Document;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
public interface DocumentDao extends JpaRepository<Document,Long> {
Page<Document> findAll(Specification<Document> specification,Pageable pageable);
}
Util:
- import java.io.File;
- import java.io.FileOutputStream;
- public class FileUtil {
- public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
- File targetFile = new File(filePath);
- if(!targetFile.exists()){
- targetFile.mkdirs(); //创建文件夹
- }
- FileOutputStream out = new FileOutputStream(filePath+fileName);
- out.write(file);
- out.flush();
- out.close();
- }
- }