如何实现文件类型的表单项上传

如何实现文件类型的表单项上传

在springmvc中,如果一个表单需要上传一个图片或者其他的file类型表单项,如何实现?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好!

可以的。操作步骤:

1、引入commons-fileupload相应的jar

2、需要在springmvc.xml配置CommonsMultipartResolver,也就是文件上传解析器

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
      <!--上传文件的最大大小,单位为字节 --> 
    <property name="maxUploadSize" value="17367648787"></property>
     
    <!-- 上传文件的编码 -->
    <property name="defaultEncoding" value="UTF-8"></property></bean>

3、form表单的enctype设置为multipart/form-data,以二进制的形式传输数据。

4、 后台参考代码:

使用MultipartFile对象作为参数,接收前端发送过来的文件

@RequestMapping("/upload")

public String upload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest req)
        throws IllegalStateException, IOException {    
        //随机文件名
        String fileName = UUID.randomUUID().toString().replace( "-", "" );
        //文件存储路径
        String path = request.getServletContext().getRealPath( "XXX" ); 
        //后缀名 jpg
        String extension = FilenameUtils.getExtension( multipartFile.getOriginalFilename() );
        
        File file = new File( path + fileName + "." + extension );
        //保存文件
        multipartFile.transferTo( file );

  return "success";
}

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


  • 慕沐8221787 提问者 #1
    好的,非常感谢!
    2020-03-08 10:30:56
好帮手慕阿满 2020-03-07 19:02:11

同学你好,可以的,需要添加@MultipartConfig注解,表示该类用来接收大文件对象的,具体可以参考《项目:电商模块开发》中@MultipartConfig的使用。

祝:学习愉快~

  • 提问者 慕沐8221787 #1
    我的意思是按照如下形式:在方法中以参数来直接接收的方式,可以实现文件上传吗? // @PostMapping("/apply") @ResponseBody public String apply(String name, String course, @RequestParam List<Integer> purpose){ System.out.println(name); System.out.println(course); for(Integer i:purpose){ System.out.println(i); } return "SUCCESS"; }
    2020-03-07 20:38:20
好帮手慕阿满 2020-03-07 15:17:16

同学你好,如果表单需要上传一个图片或者其他的file类型表单项,表单需要使用post请求,还需要增加enctype="multipart/form-data"。另外需要导入commons-fileupload和commons-io等文件上传所需要的依赖。在后台中,需要使用DiskFileItemFactory等文件上传相关的类来接收上传的文件。具体可以参考第二阶段《登陆注册功能》文件上传案例。

祝:学习愉快~

  • 提问者 慕沐8221787 #1
    不能像其他的参数接收方式一样,在controller方法中增加一个参数项直接接收吗?
    2020-03-07 15:28:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师