spring之文件上传

springmvc的文件上传比较简单,它已经将流的使用全部封装好,因此你不必知道流的使用细节就可以完成文件上传,springmvc的文件上传需要用到参数绑定的知识。

参数绑定:通俗的说就是前端表单中表单元素的name值需要跟controller中的参数名一致,或者跟在url后面的参数名需要跟controller中的参数名保持一致 eg:

http://www.lucheng.com/get?name=sss

controller:

@Getmapping("/get")

public void get(@requestParam(“参数名”) String name){}

这样就完成了简单的参数绑定,@requestParam的作用就是当你前端的参数名不想用name的时候,那么你需要跟@requestParam(“参数名”)这个注解中定义的名称相同。

文件上传配置:

xml-》

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"/>
        <property name="maxUploadSize" value="102400000000"/>
</bean>

bean的配置中id名必须是上面的这个,否则会出现传入图片了但是后端一直提示null的错误。

controller:

@PostMapping("/upload")
public ModelAndView up(@RequestParam("file") MultipartFile multipartFile)throws Exception{
    if(multipartFile == null){
        throw new Exception("未传入对象");
    }
    //获取文件的名称
    String name = multipartFile.getOriginalFilename();
    File file1 = new File("e:\\temp\\img\\"+name);
    file1.mkdirs();
    multipartFile.transferTo(file1);
    ModelAndView modelAndView = new ModelAndView("yes");
    return modelAndView;
}

前端表单:<input type="file" name="file">,这样就完成了文件上传,springmvc的文件上传,会将file对象表示的路径中的最后一个路径名当作数据写入的位置,这个是需要注意的,不要认为你只需要给个文件夹路径就可以了,那样文件上传虽然不会出错但是,得不到需要的结果,可以按照我上面给的路径将name去掉之后来亲自测试一下。

多文件上传: 只需要将MultipartFile设置为数组就可以了,前端多个input的name值需要相同

eg:<input type="file" name="file">   <input type="file" name="file">   <input type="file" name="file">

通过文件上传也可以知道springmvc的参数绑定的几种形式:

1. 简单类型数据的参数绑定:只需要前端提交数据的name值或者url后面跟的参数名,和controller中的参数名相同就好

2.javabean参数绑定:只需要前端提交数据的name值或者url后面跟的参数名,和controller中javabean对象的属性值相同就好

eg:

javaBean:     public class user{

    private int id;

    private String name;

    省略 getter 和setter(但是这是必须要有的)

}

controller:   XXXX(user u){}

前端:input type=“text” name="id"   input type=“text” name="name" 

这样就完成了

3.包装类型的参数绑定:与第二种相同,但是javaBean的属性中会有另外一个类声明的对象属性

eg:

javaBean:     public class user{

    private int id;

    private String name;

    private parent p;    (p中有id属性)

    省略 getter 和setter(但是这是必须要有的)

}

controller:   XXXX(user u){}

前端:input type=“text” name="id"   

input type=“text” name="name"  

input type=“text” name="p.id" 

这样就完成了

4.数组的参数绑定可以参考文件上传的demo

5.集合类的参数绑定(以list为例):

controller:   XXXX(list对象)

{}

前端:

input type=“text” name="list/map对象【0】/【key】"; 


这样就完成了



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值