Spring Boot对接Google Drive用Postman上传文件报mime type错误如何解决
错误解决方法:Invalid mime type "media": does not contain '/'
报错信息:Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Invalid mime type "media": does not contain '/']
错误原因
该错误本质是请求/代码中传递了不符合规范的MIME类型,合法MIME类型格式为类型/子类型(如image/png、application/json),当前传递的media缺少/分隔符,无法被框架识别。
解决方案
按顺序执行以下两步即可解决:
第一步:修正Postman测试配置(90%以上的问题由该原因导致)
- 打开当前上传请求的
Body标签,选择form-data格式 - 填写
key为file时,点击key输入框右侧的下拉菜单,选择File类型,不要选Text - 切换到
Headers标签,不要手动填写Content-Type请求头,Postman会在你选择文件后自动生成带boundary参数的合法multipart/form-data请求头 - (可选)点击form-data列表右侧的列配置按钮,调出
Content-Type列,确认对应file行的Content-Type没有被手动填写为media,留空即可
第二步:代码层面增加MIME类型兜底兼容
就算客户端/测试工具传了错误的MIME类型,代码也可以做校验兜底,避免直接报错,修改你的uploadFile方法如下:
public String uploadFile(MultipartFile file) { try { if (file != null) { File fileMetadata = new File(); fileMetadata.setName(file.getOriginalFilename()); // 新增MIME类型校验逻辑 String contentType = file.getContentType(); if (contentType == null || !contentType.contains("/")) { // 兜底默认用二进制流类型,不影响文件上传到Google Drive contentType = MediaType.APPLICATION_OCTET_STREAM_VALUE; // 也可根据文件后缀推断正确的MIME类型,以下是简单实现示例 String fileName = file.getOriginalFilename(); if (fileName != null && fileName.contains(".")) { String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); contentType = switch (suffix) { case "png" -> "image/png"; case "jpg", "jpeg" -> "image/jpeg"; case "pdf" -> "application/pdf"; case "txt" -> "text/plain"; default -> contentType; }; } } File uploadFile = googleDriveManager.getInstance() .files() .create(fileMetadata, new InputStreamContent( contentType, new ByteArrayInputStream(file.getBytes())) ) .setFields("id").execute(); return uploadFile.getId(); } } catch (Exception e) { System.out.print("Error: "+e); } return null; }
内容的提问来源于stack exchange,提问作者Linet M Shaji
相关产品推荐
相关产品推荐

