application.yml配置
spring: profiles.active: aeolian ## MULTIPART (MultipartProperties) # 開啟 multipart 上傳功能 servlet.multipart.enabled: true # 文件寫入磁盤的閾值 servlet.multipart.file-size-threshold: 1KB # 最大文件大小 servlet.multipart.max-file-size: 200MB # 最大請求大小 servlet.multipart.max-request-size: 215MB ## 文件存儲所需參數 # 所有通過 REST APIs 上傳的文件都將存儲在此目錄下 file.upload-dir: ./uploads
Controller
@RestController @RequestMapping("/wx/media") public class MediaController { @Resource private WxCpProperties properties; private final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 臨時文件上傳 - 只有一個文件 * @param type * @param request * @return * @throws WxErrorException * @throws IOException */ @RequestMapping(value = "/uploadTemp/{type}", method = {RequestMethod.GET,RequestMethod.POST},produces = "application/json;charset=UTF-8") public String sendMessage(@PathVariable String type,HttpServletRequest request) throws WxErrorException, IOException { List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file"); MultipartFile multipartFile = null; if (files.size()>0){ multipartFile = files.get(0); }else { /*讀取文件失敗*/ logger.error("臨時文件上傳失敗,未讀取到文件!"); mediaResult.setErrmsg("未讀取到上傳的文件!請確保Content-Type為multipart/form-data;並且文件參數的key為file"); return JsonUtils.toJson(mediaResult); } /*驗證上傳文件大小,防止浪費空間內存*/ long sizeMb = multipartFile.getSize() / (1024 * 1024); if (sizeMb > 50){ mediaResult.setErrmsg("文件過大,詳情查看 https://work.weixin.qq.com/api/doc/90000/90135/90253"); return JsonUtils.toJson(mediaResult); } String result = ""; /*主要業務邏輯*/ return result; } }
