package com.mindskip.xzs.controller.student; import cn.hutool.core.codec.Base64; import com.mindskip.xzs.base.BaseApiController; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.User; import com.mindskip.xzs.service.FileUpload; import com.mindskip.xzs.service.UserService; import com.mindskip.xzs.viewmodel.admin.file.UeditorConfigVM; import com.mindskip.xzs.viewmodel.admin.file.UploadResultVM; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; 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 */ @Slf4j @AllArgsConstructor @RequestMapping("/api/student/upload") @RestController("StudentUploadController") public class UploadController extends BaseApiController { private final FileUpload fileUpload; private final UserService userService; private static final Logger logger = LoggerFactory.getLogger(com.mindskip.xzs.controller.admin.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"; /** * 图片上传 * * @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); } } /** * 用户头像更新 * * @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, "文件上传失败"); } User user = getCurrentUser(); user.setImagePath(filePath); userService.updateByIdFilter(user); return RestResponse.ok(filePath); } }