123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- package com.fuint.module.backendApi.controller;
- import com.aliyun.oss.OSS;
- import com.fuint.common.dto.AccountInfo;
- import com.fuint.common.service.SettingService;
- import com.fuint.common.util.AliyunOssUtil;
- import com.fuint.common.util.CommonUtil;
- import com.fuint.common.util.DateUtil;
- import com.fuint.common.util.TokenUtil;
- import com.fuint.framework.web.BaseController;
- import com.fuint.framework.web.ResponseObject;
- import com.fuint.utils.StringUtil;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import lombok.AllArgsConstructor;
- import org.springframework.security.access.prepost.PreAuthorize;
- import org.springframework.util.ResourceUtils;
- import org.springframework.web.bind.annotation.CrossOrigin;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
- import org.springframework.web.multipart.MultipartHttpServletRequest;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.core.env.Environment;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.*;
- import java.net.URL;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.UUID;
- /**
- * 文件上传管理控制类
- *
- * Created by FSQ
- * CopyRight https://www.fuint.cn
- */
- @Api(tags="管理端-文件上传相关接口")
- @RestController
- @AllArgsConstructor
- @RequestMapping(value = "/backendApi/file")
- public class BackendFileController extends BaseController {
- private static final Logger logger = LoggerFactory.getLogger(BackendFileController.class);
- /**
- * 环境变量
- * */
- private Environment env;
- /**
- * 系统设置服务接口
- * */
- private SettingService settingService;
- /**
- * 后台上传文件
- *
- * @param request
- * @throws
- */
- @ApiOperation(value = "后台上传文件")
- @RequestMapping(value = "/upload", method = RequestMethod.POST)
- @CrossOrigin
- public ResponseObject uploadFileLocal(HttpServletRequest request) {
- String token = request.getHeader("Access-Token");
- String action = request.getParameter("action") == null ? "" : request.getParameter("action");
- AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
- if (action.equals("config")) {
- Map<String, Object> outParams = new HashMap();
- outParams.put("imageActionName", "upload");
- outParams.put("fileActionName", "upload");
- outParams.put("fileFieldName", "file");
- outParams.put("imageFieldName", "file");
- outParams.put("fileUrlPrefix", "");
- outParams.put("imageUrlPrefix", "");
- return getSuccessResult(outParams);
- }
- MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
- String sourcePic = request.getParameter("sourcePic");// 页面图片元素的ID
- MultipartFile file = multipartRequest.getFile(sourcePic);
- if (file == null) {
- Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
- if (fileMap.size() > 0) {
- file = fileMap.get("file");
- }
- }
- Map<String, String> resultMap = new HashMap<>();
- String originalFilename = file.getOriginalFilename();
- if (StringUtil.isEmpty(originalFilename)) {
- return getFailureResult(201, "上传出错啦");
- }
- String maxSizeStr = env.getProperty("images.upload.maxSize");
- // 默认限制2M
- float maxSize = 2;
- try {
- maxSize = Float.parseFloat(maxSizeStr);
- } catch (NumberFormatException e) {
- logger.error("图片允许的大小设置不正确", e);
- }
- if (file.getSize() > (maxSize * 1024 * 1024)) {
- return getFailureResult(201, "上传的文件不能大于" + maxSize + "MB");
- }
- // 保存文件
- try {
- String fileName = saveFile(file);
- String baseImage = settingService.getUploadBasePath();
- String filePath = baseImage + fileName;
- String url = filePath;
- // 上传阿里云oss
- String mode = env.getProperty("aliyun.oss.mode");
- if (mode.equals("1")) { // 检查是否开启上传
- String endpoint = env.getProperty("aliyun.oss.endpoint");
- String accessKeyId = env.getProperty("aliyun.oss.accessKeyId");
- String accessKeySecret = env.getProperty("aliyun.oss.accessKeySecret");
- String bucketName = env.getProperty("aliyun.oss.bucketName");
- String folder = env.getProperty("aliyun.oss.folder");
- String domain = env.getProperty("aliyun.oss.domain");
- OSS ossClient = AliyunOssUtil.getOSSClient(accessKeyId, accessKeySecret, endpoint);
- String pathRoot = env.getProperty("images.root");
- if (pathRoot == null || StringUtil.isEmpty(pathRoot)) {
- pathRoot = ResourceUtils.getURL("classpath:").getPath();
- }
- File ossFile = new File(pathRoot + fileName);
- fileName = AliyunOssUtil.upload(ossClient, ossFile, bucketName, folder);
- filePath = domain + fileName;
- url = filePath;
- }
- resultMap.put("status", "success");
- resultMap.put("domain", baseImage);
- resultMap.put("filePath", filePath);
- resultMap.put("fileName", fileName);
- resultMap.put("state", "SUCCESS");
- resultMap.put("original", file.getOriginalFilename());
- resultMap.put("size", file.getSize()+"");
- resultMap.put("title", fileName);
- resultMap.put("type", file.getContentType());
- resultMap.put("url", url);
- String ip = CommonUtil.getIPFromHttpRequest(request);
- logger.info("用户ip:{},上传文件url:{},account:{}", ip, url, accountInfo.getAccountName());
- } catch (Exception e) {
- return getFailureResult(201, "上传失败,请检查上传配置及权限");
- }
- return getSuccessResult(resultMap);
- }
- /**
- * 下载文件
- *
- * @return
- */
- @ApiOperation(value = "下载文件")
- @RequestMapping(value = "/download", method = RequestMethod.GET)
- @CrossOrigin
- public void download(HttpServletRequest request, HttpServletResponse response) {
- String token = request.getParameter("token");
- AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
- try {
- URL resourceUrl = getClass().getClassLoader().getResource("GoodsTemplate.xlsx");
- String path = resourceUrl.getPath();
- File file = new File(path);
- String filename = file.getName();
- InputStream fis = new BufferedInputStream(new FileInputStream(path));
- byte[] buffer = new byte[fis.available()];
- fis.read(buffer);
- fis.close();
- response.reset();
- response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
- response.addHeader("Content-Length", "" + file.length());
- OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
- response.setContentType("application/octet-stream");
- toClient.write(buffer);
- toClient.flush();
- toClient.close();
- } catch (IOException ex) {
- ex.printStackTrace();
- logger.error("下载文件出错:account = {}", accountInfo.getAccountName());
- }
- }
- public String saveFile(MultipartFile file) throws Exception {
- String fileName = file.getOriginalFilename();
- String imageName = fileName.substring(fileName.lastIndexOf("."));
- String pathRoot = env.getProperty("images.root");
- if (pathRoot == null || StringUtil.isEmpty(pathRoot)) {
- pathRoot = ResourceUtils.getURL("classpath:").getPath();
- }
- String uuid = UUID.randomUUID().toString().replaceAll("-", "");
- String baseImage = env.getProperty("images.path");
- String filePath = baseImage + DateUtil.formatDate(new Date(), "yyyyMMdd")+"/";
- String path = filePath + uuid + imageName;
- try {
- File tempFile = new File(pathRoot + path);
- if (!tempFile.getParentFile().exists()) {
- tempFile.getParentFile().mkdirs();
- }
- CommonUtil.saveMultipartFile(file, pathRoot + path);
- } catch (Exception e) {
- throw new Exception("上传失败,请检查目录是否可写");
- }
- return path;
- }
- }
|