`

SpringBoot接收MultipartFile强转CommonsMultipartFile失败

阅读更多

项目目的:

使用MultipartFile接收http post传进来的图片,Controller中把接收到的图像转换为File对象给后续程序使用。

 

代码实现:

SpringBoot MVC接收外部传入的图片,强转失败。代码如下:

@PostMapping("/parseImage")
public String parseImage(HttpServletRequest request, @RequestParam MultipartFile[] uploadFiles) throws IOException, ServletException {
    StandardMultipartHttpServletRequest req = (StandardMultipartHttpServletRequest) request;

    int fileSize = uploadFiles.length;
    File[] files = new File[fileSize];
    for (int i = 0; i < fileSize; i++) {
        CommonsMultipartFile f = (CommonsMultipartFile) uploadFiles[i];
        DiskFileItem dfi = (DiskFileItem) f.getFileItem();
        File tempFile = dfi.getStoreLocation();
        files[i] = tempFile;
    }
    // 此处省略部分代码
    // ...
    return "success";
}

 

报错:

java.lang.ClassCastException: org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile cannot be cast to org.springframework.web.multipart.commons.CommonsMultipartFile

 

细节说明:

SprintBoot 缺省 HttpServletRequest 的实现是 StandardMultipartHttpServletRequest。

 

报错其实说的也是很明白了,StandardMultipartFile类不能强转为CommonsMultipartFile,但又想转存为File对象。 基本思路是: 先创建一个新的临时文件dfile对象,然后调用MultipartFile.transferTo(File dfile)方法把MultipartFile转换为File对象。 新的代码如下:

 

@PostMapping("/parseImage")
public String parseImage(HttpServletRequest request, @RequestParam(value = "uploadFiles", required = true) MultipartFile[] uploadFiles) {
    int fileSize = uploadFiles.length;
    File[] files = new File[fileSize];
    if (uploadFiles != null && uploadFiles.length > 0) {
        for (int i = 0; i < uploadFiles.length; i++) {
            MultipartFile f = uploadFiles[i];
            System.out.println(f.getName());   // 为上传的key值
            System.out.println(f.getOriginalFilename());  // 上传的真实文件的文件名
            File dfile = null;
            try {
                dfile = File.createTempFile("prefix", "_" + f.getOriginalFilename());
                f.transferTo(dfile);
                files[i] = dfile;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }// 此处忽略部分代码
return "seccess";
}

 

SpringBoot application.yml配置事例:

spring:
  servlet:
    multipart:
      max-file-size: 20MB
      max-request-size: 100MB
      enabled: true
      resolve-lazily: false
分享到:
评论

相关推荐

    java springboot 切割分片上传大文件

    在Controller层,可以通过`@RequestParam("file") MultipartFile file`来接收文件。 3. **文件分片**: - 使用Java的`FileChannel`类可以实现文件的读取和写入,通过设置适当的缓冲区大小,我们可以读取大文件的一...

    解决springboot MultipartFile文件上传遇到的问题

    解决 Spring Boot MultipartFile 文件上传遇到的问题 基于 Spring Boot 框架的 MultipartFile 文件上传经常会遇到一些问题,本文将介绍如何解决这些问题,希望对大家有所帮助。 问题一:ajax 传过去的参数在 ...

    SpringBoot请求参数接收方式

    这些接收方式取决于客户端发送请求的方式和数据格式。以下是Spring Boot中常见的几种请求参数接收方式的详细说明: 1. **`@RequestParam`接收:** `@RequestParam`注解用于从URL查询字符串中获取参数。例如: ```...

    springboot实现上传图片添加水印

    在控制器类中,我们可以创建一个方法来接收并处理这些文件。 ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 文件处理逻辑 } ``` 接下来,...

    java springboot MultipartFile 根据注解自动识别表头对应对象字段名称,方法返回List-Map 对象

    框架:SpringBoot, apache.poi 文件对象: MultipartFile 根据注解(ExcelNameAnno)自动识别表头对应对象字段名称,方法返回Map, String&gt;对象 -- 有问题请联系:vinfol@qq.com 或私信 -- 主要实现: 通过动态...

    File 转 MultipartFile 和MultipartFile的maven配置

    在Spring MVC中,你可以通过`@RequestParam("file") MultipartFile multipartFile`注解来接收上传的文件。然后,你可以使用`MultipartFile`提供的方法如`getBytes()`、`getOriginalFilename()`等来处理文件。 ```...

    JAVA超级简单的excel导入导出,springboot使用easypoi

    public void importUser(MultipartFile file) throws Exception { List&lt;User&gt; userList = EasyPoiUtils.importExcel(file.getInputStream(), User.class); // 处理导入的数据,例如保存到数据库 for (User user ...

    springboot实现FastJson解析json数据的方法

    在Spring Boot中实现FastJson解析JSON数据的方法主要涉及以下几个知识点: 1. FastJson简介: FastJson是由阿里巴巴开源的一款Java语言编写的高性能的JSON处理器。它可以方便快速地将Java对象转换成JSON字符串,也...

    springboot接收别人上传的本地视频实例代码

    这里,`MultipartFile` 对象被用来接收上传的视频文件。 知识点 5: Autowired 注解 `@Autowired` 注解用于自动装配 Spring Bean。这里,`@Autowired` 注解被用来装配 PermissionService Bean。 知识点 6: Value ...

    springboot文件上传路径保存数据库并且可以复制路径网页访问图片

    4. **处理文件上传的Controller**:创建一个`@PostMapping`的Controller方法,接收`MultipartFile`对象,并将其保存到指定的目录。同时,获取保存文件的完整路径。 5. **数据库操作**:使用Spring Data JPA或者...

    springboot整合身份证识别机具.zip

    在本文中,我们将深入探讨如何将身份证识别功能与SpringBoot应用程序进行整合,特别是在Java项目中的实践。我们将讨论涉及的关键技术,包括身份证识别机具、驱动程序、读卡软件以及SpringBoot框架的应用。此外,我们...

    springboot大文件分片上传

    springboot 大文件上传,支持分片并发上传、断点续传、秒传,已经测试过1.2G的文件,最大支持理论无限制 博文链接:https://blog.csdn.net/haohao123nana/article/details/54692669

    Vue+SpringBoot前后端交互实现文件上传示例代码.rar

    在处理文件上传时,SpringBoot 提供了MultipartFile接口,可以方便地处理多部分表单数据,包括文件。 在实现Vue与SpringBoot的文件上传交互过程中,以下步骤是关键: 1. **前端(Vue.js)**: - 创建一个`...

    多文件上传例子(解决中文乱码)

    多文件上传例子,彻底解决中文乱码问题了。总结中文乱码问题如下: 1、所有页面都用UTF-8。 2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。...

    上传文件加密的小实例

    在IT行业中,文件的安全传输和存储是至关重要的。在这个小实例中,我们关注的是如何对上传的文件进行加密处理,确保其在传输过程中的安全。本文将深入探讨这个主题,详细解释加密和压缩的原理,以及如何实现这两个...

    基于SpringBoot实现上传2种方法工程代码实例

    这通常涉及到Controller层的处理,比如创建一个接收`MultipartFile`的REST端点,然后将文件保存到本地文件系统、云存储服务(如AWS S3)或其他持久化存储中。这种方式的优点在于简化了部署和运维,但可能不适用于大...

    springboot上传以及获取图片

    public ResponseEntity&lt;String&gt; uploadImage(@RequestParam("file") MultipartFile file) { // 验证文件是否为空 if (file.isEmpty()) { return ResponseEntity.badRequest().body("请选择文件"); } // 保存...

    springboot实现上传并解析Excel过程解析

    SpringBoot 实现上传并解析 Excel 过程解析 SpringBoot 是一个流行的 Java 框架,用于快速构建基于 Spring 的应用程序。Excel 是一个广泛使用的电子表格软件,用于存储和分析数据。本文将介绍如何使用 SpringBoot ...

    基于SpringBoot的图片上传与显示.zip

    在这个项目中,开发者可以通过表单提交包含图片文件的数据,SpringBoot的Controller层会接收到这些文件,并将其保存到服务器的指定目录。这涉及到文件流的读写、文件安全性和存储策略等知识。 在实现图片上传的同时...

    安卓打开相机相册功能实现,并通过SpringBoot对接Retrofit2上传图片(@RequestBody转变为MultiPartFile全流程,低门槛实现系列)

    需求分析: 通过安卓打开相机相册,使用SSM框架搭建后台接口,前端使用retrofit2进行文件传输 注:低门槛实现系列就是不涉及过深的知识点,不做过多的异常捕获,不过滤版本不判空,面向小白。 ...

Global site tag (gtag.js) - Google Analytics