Java中将File转化为MultipartFile的操作

作者:hui008 时间:2021-07-05 21:25:32 

话不多说直接上代码,简单明了


import java.io.File;
import java.io.FileInputStream;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.mock.web.MockMultipartFile;
import org.apache.http.entity.ContentType;

File pdfFile = new File("D://test.pdf");
FileInputStream fileInputStream = new FileInputStream(pdfFile);
MultipartFile multipartFile = new MockMultipartFile(pdfFile.getName(), pdfFile.getName(),
  ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);

不少网友反馈说要下jar包的依赖,如下

jar包依赖:


<dependency>
 <groupId>org.apache.httpcomponents</groupId>
 <artifactId>httpcore</artifactId>
 <version>4.4.9</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-test</artifactId>
 <version>5.1.6.RELEASE</version>
</dependency>

补充知识:SPRING MVC文件上传功能关于不能实例化MultipartFile对象原因分析

实现文件上传有几个需要注意的地方

1、文件上传的HTML,需要在form中加入enctype="multipart/form-data"

2、在Spring的配置文件中需要指定org.springframework.web.multipart.commons.CommonsMultipartResolver。


<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<!-- 指定所上传文件的总大小,单位字节。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<property name="maxUploadSize" value="10240000" />
</bean>

3、在我们执行文件上传方法的Controller类上面需要加入@RequestParam注解或在Spring的配置文件中加入<mvc:annotation-driven/>的配置


@RequestMapping("upload.do")
public String upload(@RequestParam MultipartFile file) {
<mvc:annotation-driven/>

如果在我们不加入@RequestParam注解且没有加入<mvc:annotation-driven/>注解的情况下,在执行文件上传时会报如下异常:


javax.servlet.ServletException: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.multipart.MultipartFile]: Specified class is an interface
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:531)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:760)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:678)
at java.lang.Thread.run(Thread.java:745)

注:个人比较建议在配置文件中加入annotation-driven用于打开注解驱动。这样我们在做文件上传时,就不需要在每个上传的文件对象上加入@RequestParam的注解了。

来源:https://blog.csdn.net/tianlong1569/article/details/82905802

标签:Java,File,MultipartFile
0
投稿

猜你喜欢

  • java如何将int数组转化为Integer数组

    2021-07-19 04:22:37
  • Android实现图片点击爆炸效果

    2023-06-04 04:18:55
  • java关于并发模型中的两种锁知识点详解

    2023-09-16 02:05:34
  • C#中DataGridView常用操作实例小结

    2023-03-09 23:55:16
  • springboot 按月分表的实现方式

    2023-11-25 00:03:47
  • C#中实现判断某个类是否实现了某个接口

    2022-12-31 19:39:45
  • c#访问this关键字和base关键字示例

    2021-09-28 23:36:14
  • Android Studio配置(Android Studio4.1为例)

    2022-04-18 04:19:18
  • c语言实现可自定义的游戏地图

    2021-10-25 14:38:34
  • C++ 中的异常抛出和捕获方式

    2021-06-08 21:24:19
  • Android编程实现动态支持多语言的方法

    2021-11-01 12:38:25
  • android开发之listView组件用法实例简析

    2023-02-05 10:31:52
  • java线程间通信的通俗解释及代码示例

    2023-12-06 18:04:43
  • 以Java代码的方式总结几个典型的内存溢出案例

    2023-06-11 04:00:56
  • MVC框架自定义实现过程

    2021-07-24 03:31:47
  • Android Studio 在项目中引用第三方jar包的方法

    2023-07-18 22:05:49
  • jQuery 动画效果代码分享

    2023-11-24 00:10:12
  • Mybatis模糊查询及自动映射实现详解

    2021-10-29 12:05:40
  • 如何使用C#代码创建快捷方式文件详解

    2022-03-02 01:13:42
  • C++类静态成员与类静态成员函数详解

    2022-10-10 08:22:20
  • asp之家 软件编程 m.aspxhome.com