package com.mindskip.xzs.controller.admin; import cn.hutool.core.codec.Base64; import com.mindskip.xzs.base.BaseApiController; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.service.ExcelImportService; import com.mindskip.xzs.service.FileUpload; import com.mindskip.xzs.viewmodel.admin.file.UeditorConfigVM; import com.mindskip.xzs.viewmodel.admin.file.UploadResultVM; import lombok.AllArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.UUID; /** * @version 2.2.0 * @description: 上传 * Copyright (C), 2020-2021, 武汉思维跳跃科技有限公司 * @date 2021 /9/7 9:45 */ @AllArgsConstructor @RequestMapping("/api/admin/upload") @RestController("AdminUploadController") public class UploadController extends BaseApiController { private final FileUpload fileUpload; private static final Logger logger = LoggerFactory.getLogger(UploadController.class); private static final String SCRAWL_UPLOAD = "scrawlUpload"; private static final String SCRAWL_FIELD_NAME = "scrawl"; private static final String IMAGE_UPLOAD = "imgUpload"; private static final String IMAGE_UPLOAD_FILE = "upFile"; private static final String STATE = "SUCCESS"; private final ExcelImportService excelImportService; /** * 图片上传 * * @param request the request * @return the object */ @ResponseBody @RequestMapping("/configAndUpload") public Object upload(HttpServletRequest request) { String action = request.getParameter("action"); if (null == action) return null; String filePath = null; switch (action) { case IMAGE_UPLOAD: MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request; MultipartFile multipartFile = multipartHttpServletRequest.getFile(IMAGE_UPLOAD_FILE); String fileName = multipartFile.getOriginalFilename(); long attachSize = multipartFile.getSize(); try (InputStream inputStream = multipartFile.getInputStream()) { filePath = fileUpload.fileUpload(inputStream, attachSize, fileName, "image"); } catch (IOException e) { logger.error(e.getMessage(), e); } return new UploadResultVM(fileName, fileName, filePath, multipartFile.getSize(), fileName, STATE); case SCRAWL_UPLOAD: String imageBase64 = request.getParameter(SCRAWL_FIELD_NAME); String uuidName = UUID.randomUUID().toString(); try { File file = File.createTempFile(uuidName, ".png"); try (FileOutputStream fileOutputStream = new FileOutputStream(file)) { byte[] buff = Base64.decode(imageBase64); fileOutputStream.write(buff); filePath = fileUpload.fileUpload(file, uuidName + ".png", "latex"); } } catch (IOException e) { logger.error(e.getMessage(), e); } return new UploadResultVM(filePath, STATE); default: return new UeditorConfigVM(SCRAWL_UPLOAD, SCRAWL_FIELD_NAME, IMAGE_UPLOAD, IMAGE_UPLOAD_FILE); } } /** * excel题目导入 * * @param request the request * @return the rest response */ @RequestMapping("/excel") @ResponseBody public RestResponse excel(HttpServletRequest request) { MultipartFile file = ((MultipartHttpServletRequest) request).getFile("file"); String excelTempPath = null; try (InputStream inputStream = file.getInputStream()) { excelTempPath = File.createTempFile(UUID.randomUUID().toString(), ".xlsx").getAbsolutePath(); excelImportService.adminQuestionImport(inputStream, excelTempPath, getCurrentUser()); } catch (IOException e) { logger.error(e.getMessage(), "文件上传失败"); } String filePath = fileUpload.fileUpload(new File(excelTempPath), "题目导入结果.xlsx", "excel"); return RestResponse.ok(filePath); } /** * File rest response. * * @param request the request * @return the rest response */ @RequestMapping("/file") @ResponseBody public RestResponse file(HttpServletRequest request) { MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request; MultipartFile multipartFile = multipartHttpServletRequest.getFile("file"); String fileName = multipartFile.getOriginalFilename(); long fileSize = multipartFile.getSize(); String filePath = null; String folder = request.getParameter("folder"); try (InputStream inputStream = multipartFile.getInputStream()) { filePath = fileUpload.fileUpload(inputStream, fileSize, fileName, folder); } catch (IOException e) { logger.error(e.getMessage(), e); return RestResponse.fail(2, "文件上传失败"); } return RestResponse.ok(filePath); } }