package com.my.blog.website.controller.admin;
import com.github.pagehelper.PageInfo;
import com.my.blog.website.constant.WebConst;
import com.my.blog.website.controller.BaseController;
import com.my.blog.website.dto.LogActions;
import com.my.blog.website.dto.Types;
import com.my.blog.website.exception.TipException;
import com.my.blog.website.modal.Bo.RestResponseBo;
import com.my.blog.website.modal.Vo.AttachVo;
import com.my.blog.website.modal.Vo.UserVo;
import com.my.blog.website.service.IAttachService;
import com.my.blog.website.service.ILogService;
import com.my.blog.website.utils.Commons;
import com.my.blog.website.utils.TaleUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* 附件管理
*
* Created by 13 on 2017/2/21.
*/
@Controller
@RequestMapping("admin/attach")
public class AttachController extends BaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(AttachController.class);
public static final String CLASSPATH = TaleUtils.getUplodFilePath();
@Resource
private IAttachService attachService;
@Resource
private ILogService logService;
/**
* 附件页面
*
* @param request
* @param page
* @param limit
* @return
*/
@GetMapping(value = "")
public String index(HttpServletRequest request, @RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "limit", defaultValue = "12") int limit) {
PageInfo<AttachVo> attachPaginator = attachService.getAttachs(page, limit);
request.setAttribute("attachs", attachPaginator);
request.setAttribute(Types.ATTACH_URL.getType(), Commons.site_option(Types.ATTACH_URL.getType(), Commons.site_url()));
request.setAttribute("max_file_size", WebConst.MAX_FILE_SIZE / 1024);
return "admin/attach";
}
/**
* 上传文件接口
*
* @param request
* @return
*/
@PostMapping(value = "upload")
@ResponseBody
@Transactional(rollbackFor = TipException.class)
public RestResponseBo upload(HttpServletRequest request, @RequestParam("file") MultipartFile[] multipartFiles) throws IOException {
UserVo users = this.user(request);
Integer uid = users.getUid();
List<String> errorFiles = new ArrayList<>();
try {
for (MultipartFile multipartFile : multipartFiles) {
String fname = multipartFile.getOriginalFilename();
if (multipartFile.getSize() <= WebConst.MAX_FILE_SIZE) {
String fkey = TaleUtils.getFileKey(fname);
String ftype = TaleUtils.isImage(multipartFile.getInputStream()) ? Types.IMAGE.getType() : Types.FILE.getType();
File file = new File(CLASSPATH+fkey);
try {
FileCopyUtils.copy(multipartFile.getInputStream(),new FileOutputStream(file));
} catch (IOException e) {
e.printStackTrace();
}
attachService.save(fname, fkey, ftype, uid);
} else {
errorFiles.add(fname);
}
}
} catch (Exception e) {
return RestResponseBo.fail();
}
return RestResponseBo.ok(errorFiles);
}
@RequestMapping(value = "delete")
@ResponseBody
@Transactional(rollbackFor = TipException.class)
public RestResponseBo delete(@RequestParam Integer id, HttpServletRequest request) {
try {
AttachVo attach = attachService.selectById(id);
if (null == attach) return RestResponseBo.fail("不存在该附件");
attachService.deleteById(id);
new File(CLASSPATH+attach.getFkey()).delete();
logService.insertLog(LogActions.DEL_ARTICLE.getAction(), attach.getFkey(), request.getRemoteAddr(), this.getUid(request));
} catch (Exception e) {
String msg = "附件删除失败";
if (e instanceof TipException) msg = e.getMessage();
else LOGGER.error(msg, e);
return RestResponseBo.fail(msg);
}
return RestResponseBo.ok();
}
}