上传附件功能。

main
tamguo 7 years ago
parent f8c6365030
commit 9d1dd77f6f

@ -4,9 +4,11 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -25,8 +27,12 @@ import com.tamguo.common.utils.DateUtil;
import com.tamguo.common.utils.Result; import com.tamguo.common.utils.Result;
import com.tamguo.modules.book.model.DocumentEntity; import com.tamguo.modules.book.model.DocumentEntity;
import com.tamguo.modules.book.model.FileEntity; import com.tamguo.modules.book.model.FileEntity;
import com.tamguo.modules.book.model.FileUploadEntity;
import com.tamguo.modules.book.model.enums.BizTypeEnum;
import com.tamguo.modules.book.model.enums.FileUploadStatusEnum;
import com.tamguo.modules.book.service.IDocumentService; import com.tamguo.modules.book.service.IDocumentService;
import com.tamguo.modules.book.service.IFileEntityService; import com.tamguo.modules.book.service.IFileEntityService;
import com.tamguo.modules.book.service.IFileUploadService;
import com.tamguo.utils.FileMd5Utils; import com.tamguo.utils.FileMd5Utils;
@Controller @Controller
@ -39,18 +45,32 @@ public class DocumentController {
IDocumentService iDocumentService; IDocumentService iDocumentService;
@Autowired @Autowired
IFileEntityService iFileEntityService; IFileEntityService iFileEntityService;
@Autowired
IFileUploadService iFileUploadService;
@Value("${file.storage.path}") @Value("${file.storage.path}")
private String fileStoragePath; private String fileStoragePath;
@Value("${domain.name}") @Value("${domain.name}")
private String domainName; private String domainName;
@SuppressWarnings("unchecked")
@RequestMapping(value = "{id}" , method = RequestMethod.GET) @RequestMapping(value = "{id}" , method = RequestMethod.GET)
@ResponseBody @ResponseBody
public Result getDocument(@PathVariable String id) { public Result getDocument(@PathVariable String id) {
DocumentEntity document = null; DocumentEntity document = null;
try { try {
document = iDocumentService.selectById(id); document = iDocumentService.selectById(id);
// 查询附件
List<FileUploadEntity> fileUploads = iFileUploadService.selectList(Condition.create().eq("biz_key", document.getId()).eq("biz_type", BizTypeEnum.DOCUMENT.getValue()));
if(!CollectionUtils.isEmpty(fileUploads)) {
for(int i=0 ; i<fileUploads.size() ; i++) {
FileUploadEntity fileUpload = fileUploads.get(i);
FileEntity fileEntity = iFileEntityService.selectOne(Condition.create().eq("file_id", fileUpload.getFileId()));
fileUpload.setFilePath(domainName + "files/" + fileEntity.getFilePath());
fileUpload.setFileSize(fileEntity.getFileSize());
}
document.setFileUploads(fileUploads);
}
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage() , e ); logger.error(e.getMessage() , e );
return Result.failResult("查询失败"); return Result.failResult("查询失败");
@ -130,14 +150,12 @@ public class DocumentController {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@RequestMapping(value = "uploadFile" , method = RequestMethod.POST) @RequestMapping(value = "uploadFile" , method = RequestMethod.POST)
@ResponseBody @ResponseBody
public Result uploadFile(@RequestParam("editormd-file-file") MultipartFile file, String bookId , HttpServletRequest request) { public Result uploadFile(@RequestParam("editormd-file-file") MultipartFile file , String documentId , String bookId , HttpServletRequest request) {
try { try {
String fileMd5 = FileMd5Utils.getMD5((FileInputStream)file.getInputStream()); String fileMd5 = FileMd5Utils.getMD5((FileInputStream)file.getInputStream());
FileEntity sysFile = iFileEntityService.selectOne(Condition.create().eq("file_md5", fileMd5)); FileEntity sysFile = iFileEntityService.selectOne(Condition.create().eq("file_md5", fileMd5));
if(sysFile != null) { // 文件不存在
sysFile.setFilePath(domainName + "files/" + sysFile.getFilePath()); if(sysFile == null) {
return Result.successResult(sysFile);
}
String filePath = fileStoragePath + "book/" + DateUtil.fomatDate(new Date(), "yyyyMM") + "/" + bookId; String filePath = fileStoragePath + "book/" + DateUtil.fomatDate(new Date(), "yyyyMM") + "/" + bookId;
File dest = new File(filePath); File dest = new File(filePath);
if(!dest.exists()) { if(!dest.exists()) {
@ -145,21 +163,45 @@ public class DocumentController {
} }
// save 文件 // save 文件
FileUtils.writeByteArrayToFile(new File(filePath + "/" + file.getOriginalFilename()) , file.getBytes()); FileUtils.writeByteArrayToFile(new File(filePath + "/" + file.getOriginalFilename()) , file.getBytes());
sysFile = new FileEntity();
FileEntity fileEntity = new FileEntity(); sysFile.setFileContentType(file.getContentType());
fileEntity.setFileContentType(file.getContentType()); sysFile.setFileExtension(file.getOriginalFilename());
fileEntity.setFileExtension(file.getOriginalFilename()); sysFile.setFileMd5(FileMd5Utils.getMD5((FileInputStream)file.getInputStream()));
fileEntity.setFileMd5(FileMd5Utils.getMD5((FileInputStream)file.getInputStream())); sysFile.setFileSize(file.getSize());
fileEntity.setFileSize(file.getSize()); sysFile.setFilePath("book/" + DateUtil.fomatDate(new Date(), "yyyyMM") + "/" + bookId + "/" + file.getOriginalFilename());
fileEntity.setFilePath("book/" + DateUtil.fomatDate(new Date(), "yyyyMM") + "/" + bookId + "/" + file.getOriginalFilename()); iFileEntityService.insert(sysFile);
iFileEntityService.insert(fileEntity); }
// 创建上传记录
fileEntity.setFilePath(domainName + "files/" + fileEntity.getFilePath()); FileUploadEntity fileUpload = new FileUploadEntity();
fileUpload.setBizKey(documentId);
return Result.successResult(fileEntity); fileUpload.setBizType(BizTypeEnum.DOCUMENT);
fileUpload.setCreateBy("system");
fileUpload.setCreateDate(new Date());
fileUpload.setFileId(sysFile.getFileId());
fileUpload.setFileName(sysFile.getFileExtension());
fileUpload.setFileType(file.getContentType());
fileUpload.setUpdateBy("system");
fileUpload.setUpdateDate(new Date());
fileUpload.setStatus(FileUploadStatusEnum.NORMAL);
iFileUploadService.insert(fileUpload);
fileUpload.setFilePath(domainName + "files/" + sysFile.getFilePath());
fileUpload.setFileSize(sysFile.getFileSize());
return Result.successResult(fileUpload);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
return Result.failResult("上传失败"); return Result.failResult("上传失败");
} }
} }
@RequestMapping(value = "removeFile" , method = RequestMethod.POST)
@ResponseBody
public Result removeFile(String id) {
try {
iFileUploadService.deleteById(id);
} catch (Exception e) {
return Result.result(1, null, "删除失败");
}
return Result.successResult("删除成功");
}
} }

@ -404,23 +404,23 @@ $(function () {
removeAttach : function ($attach_id) { removeAttach : function ($attach_id) {
var $this = this; var $this = this;
var item = $this.lists.filter(function ($item) { var item = $this.lists.filter(function ($item) {
return $item.attachment_id == $attach_id; return $item.id == $attach_id;
}); });
if(item && item[0].hasOwnProperty("state")){ if(item && item[0].hasOwnProperty("state")){
$this.lists = $this.lists.filter(function ($item) { $this.lists = $this.lists.filter(function ($item) {
return $item.attachment_id != $attach_id; return $item.id != $attach_id;
}); });
return; return;
} }
$.ajax({ $.ajax({
url : window.removeAttachURL, url : window.removeAttachURL,
type : "post", type : "post",
data : { "attach_id" : $attach_id}, data : { "id" : $attach_id},
success : function (res) { success : function (res) {
if(res.errcode === 0){ if(res.code === 0){
$this.lists = $this.lists.filter(function ($item) { $this.lists = $this.lists.filter(function ($item) {
return $item.attachment_id != $attach_id; return $item.id != $attach_id;
}); });
}else{ }else{
layer.msg(res.message); layer.msg(res.message);

@ -154,7 +154,7 @@ $(function () {
var node = { "id": res.result.id, 'parent': res.result.parentId === "0" ? '#' : res.result.parentId, "text": res.result.name, "identify": res.result.id}; var node = { "id": res.result.id, 'parent': res.result.parentId === "0" ? '#' : res.result.parentId, "text": res.result.name, "identify": res.result.id};
pushDocumentCategory(node); pushDocumentCategory(node);
window.selectNode = node; window.selectNode = node;
pushVueLists(null); pushVueLists(res.result.fileUploads);
setLastSelectNode($node); setLastSelectNode($node);
} else { } else {
layer.msg("文档加载失败"); layer.msg("文档加载失败");

@ -21,7 +21,7 @@
window.releaseURL = "[[${domainName}]]" + "/book/xingzheng/release"; window.releaseURL = "[[${domainName}]]" + "/book/xingzheng/release";
window.sortURL = "[[${domainName}]]" + "/book/xingzheng/sort"; window.sortURL = "[[${domainName}]]" + "/book/xingzheng/sort";
window.historyURL = "[[${domainName}]]" + "/history/get"; window.historyURL = "[[${domainName}]]" + "/history/get";
window.removeAttachURL = "[[${domainName}]]" + "/api/attach/remove"; window.removeAttachURL = "[[${domainName}]]" + "member/document/removeFile";
window.highlightStyle = "github"; window.highlightStyle = "github";
window.template = { "getUrl":"[[${domainName}]]" + "/api/template/get", "listUrl" : "[[${domainName}]]" + "/api/template/list", "deleteUrl" : "[[${domainName}]]" + "/api/template/remove", "saveUrl" :"[[${domainName}]]" + "/api/template/add"} window.template = { "getUrl":"[[${domainName}]]" + "/api/template/get", "listUrl" : "[[${domainName}]]" + "/api/template/list", "deleteUrl" : "[[${domainName}]]" + "/api/template/remove", "saveUrl" :"[[${domainName}]]" + "/api/template/add"}
@ -215,15 +215,15 @@
</template> </template>
<template v-else-if="item.state == 'error'"> <template v-else-if="item.state == 'error'">
<span class="error-message">${item.message}</span> <span class="error-message">${item.message}</span>
<button type="button" class="btn btn-sm close" @click="removeAttach(item.fileId)"> <button type="button" class="btn btn-sm close" @click="removeAttach(item.id)">
<i class="fa fa-remove" aria-hidden="true"></i> <i class="fa fa-remove" aria-hidden="true"></i>
</button> </button>
</template> </template>
<template v-else> <template v-else>
<a :href="item.filePath" target="_blank" :title="item.file_name">${item.fileExtension}</a> <a :href="item.filePath" target="_blank" :title="item.fileName">${item.fileName}</a>
<span class="text">(${ formatBytes(item.fileSize) })</span> <span class="text">(${ formatBytes(item.fileSize) })</span>
<span class="error-message">${item.message}</span> <span class="error-message">${item.message}</span>
<button type="button" class="btn btn-sm close" @click="removeAttach(item.attachment_id)"> <button type="button" class="btn btn-sm close" @click="removeAttach(item.id)">
<i class="fa fa-remove" aria-hidden="true"></i> <i class="fa fa-remove" aria-hidden="true"></i>
</button> </button>
<div class="clearfix"></div> <div class="clearfix"></div>

@ -0,0 +1,8 @@
package com.tamguo.modules.book.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.tamguo.modules.book.model.FileUploadEntity;
public interface FileUploadMapper extends BaseMapper<FileUploadEntity>{
}

@ -44,6 +44,9 @@ public class DocumentEntity extends Model<DocumentEntity>{
@TableField(exist=false) @TableField(exist=false)
private String cover; private String cover;
@TableField(exist=false)
private List<FileUploadEntity> fileUploads;
public String getId() { public String getId() {
return id; return id;
} }
@ -144,5 +147,11 @@ public class DocumentEntity extends Model<DocumentEntity>{
public void setStatus(DocumentStatusEnum status) { public void setStatus(DocumentStatusEnum status) {
this.status = status; this.status = status;
} }
public List<FileUploadEntity> getFileUploads() {
return fileUploads;
}
public void setFileUploads(List<FileUploadEntity> fileUploads) {
this.fileUploads = fileUploads;
}
} }

@ -0,0 +1,128 @@
package com.tamguo.modules.book.model;
import java.io.Serializable;
import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.tamguo.modules.book.model.enums.BizTypeEnum;
import com.tamguo.modules.book.model.enums.FileUploadStatusEnum;
@TableName(value="b_file_upload")
public class FileUploadEntity extends Model<FileUploadEntity>{
private static final long serialVersionUID = 1L;
private String id;
private String fileId;
private String fileName;
private String fileType;
private String bizKey;
@JSONField(serialzeFeatures= SerializerFeature.WriteEnumUsingToString)
private BizTypeEnum bizType;
@JSONField(serialzeFeatures= SerializerFeature.WriteEnumUsingToString)
private FileUploadStatusEnum status;
private String createBy;
private Date createDate;
private String updateBy;
private Date updateDate;
private String remarks;
@TableField(exist=false)
private String filePath;
@TableField(exist=false)
private Long fileSize;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getBizKey() {
return bizKey;
}
public void setBizKey(String bizKey) {
this.bizKey = bizKey;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
@Override
protected Serializable pkVal() {
return getId();
}
public BizTypeEnum getBizType() {
return bizType;
}
public void setBizType(BizTypeEnum bizType) {
this.bizType = bizType;
}
public FileUploadStatusEnum getStatus() {
return status;
}
public void setStatus(FileUploadStatusEnum status) {
this.status = status;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public Long getFileSize() {
return fileSize;
}
public void setFileSize(Long fileSize) {
this.fileSize = fileSize;
}
}

@ -0,0 +1,32 @@
package com.tamguo.modules.book.model.enums;
import java.io.Serializable;
import com.baomidou.mybatisplus.enums.IEnum;
/**
*
*/
public enum BizTypeEnum implements IEnum {
DOCUMENT("document", "文档");
private String value;
private String desc;
BizTypeEnum(final String value, final String desc) {
this.value = value;
this.desc = desc;
}
public Serializable getValue() {
return this.value;
}
public String getDesc(){
return this.desc;
}
@Override
public String toString() {
return this.value;
}
}

@ -0,0 +1,33 @@
package com.tamguo.modules.book.model.enums;
import java.io.Serializable;
import com.baomidou.mybatisplus.enums.IEnum;
/**
*
*/
public enum FileUploadStatusEnum implements IEnum {
NORMAL("normal", "正常"),
DELETE("delete", "删除");
private String value;
private String desc;
FileUploadStatusEnum(final String value, final String desc) {
this.value = value;
this.desc = desc;
}
public Serializable getValue() {
return this.value;
}
public String getDesc(){
return this.desc;
}
@Override
public String toString() {
return this.value;
}
}

@ -0,0 +1,8 @@
package com.tamguo.modules.book.service;
import com.baomidou.mybatisplus.service.IService;
import com.tamguo.modules.book.model.FileUploadEntity;
public interface IFileUploadService extends IService<FileUploadEntity>{
}

@ -0,0 +1,13 @@
package com.tamguo.modules.book.service.impl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.tamguo.modules.book.dao.FileUploadMapper;
import com.tamguo.modules.book.model.FileUploadEntity;
import com.tamguo.modules.book.service.IFileUploadService;
@Service
public class FileUploadServiceImpl extends ServiceImpl<FileUploadMapper, FileUploadEntity> implements IFileUploadService{
}
Loading…
Cancel
Save