springMvc+myBatis上传图片到mySQL数据库

思路:将前台上传的file存到MutipartFile类型字段中,再将MulipartFile转换为pojo类中的byte[]数组,最后存入数据库longBlob类型字段中
    1、jsp(enctype必须设置为"multipart/form-data")
        <form id="registerForm" action="registerSubmit.action" method="post" enctype="multipart/form-data">
                上传头像 <input type="file" id="uploadPhoto" name="uploadPhoto1">
                上传头像 <input type="file" id="uploadPhoto2" name="uploadPhoto2">
                上传头像 <input type="file" id="uploadPhoto3" name="uploadPhoto3">
                <p class="help-block">点击浏览上传您的照片(至少一张,最多可上传三张)</p>
        </form>


2、controller
        // 提交注册
    @RequestMapping(value = "/registerSubmit.action")
    public String registerSubmit(User user,<span style="color:#ff0000;">MultipartFile uploadPhoto1,MultipartFile uploadPhoto2,MultipartFile uploadPhoto3</span>,HttpServletResponse response,HttpServletRequest request,Model model) throws Exception {
        String msg = registerService.addUser(user,userBirthdayStr,uploadPhoto1,uploadPhoto2,uploadPhoto3); 
        return "forward:sociaty.action";  //在跳转之前需判断是否注册成功
    }


3、service
    @Override
    public String addUser(User user,<span style="color:#ff0000;">MultipartFile  pic1,MultipartFile pic2,MultipartFile pic3</span>) throws Exception {
        //上传图片
        user.setID(UUID.randomUUID().toString());//设置id
        //user还有其他属性,jsp提交的时候已经写入到user,不用再set
        
        //转换图片格式 :MultipartFile --> byte
        byte[] b1 = pic1.getBytes();
<span style="white-space:pre">	</span>byte[] b2 = pic2.getBytes();
<span style="white-space:pre">	</span>byte[] b3 = pic3.getBytes();<span style="white-space:pre">	</span>
        user.setUploadPhoto1_Byte(b1); //将转换后的byte[]存入到user类中byte[]字段
        user.setUploadPhoto2_Byte(b2);
        user.setUploadPhoto3_Byte(b3);

        registerMapper.addUser(user);
        return "success";
    }


4、mapper.xml
       sql语句
            <insert id="addUser" parameterType="com.xxx.xxx.User">
                insert into 表名
                values
                (  #{uploadPhoto1_Byte,jdbcType=BLOB},#{uploadPhoto2_Byte,jdbcType=BLOB},
                #{uploadPhoto3_Byte,jdbcType=BLOB})
            </insert>


         设置mysql表中字段类型为blob或 longBlog

5、user类( byte[]类型字段,用来将文件存入数据库
    private byte[] uploadPhoto1_Byte;
    private byte[] uploadPhoto2_Byte;
    private byte[] uploadPhoto3_Byte;



6、设置mysql配置文件(my-large.ini)中 max_allowed_packet 为4M
        不然的话上传文件超过1M会报错:  

            Packet for query is too large (1117260 > 1048576). You can change this value on the server by

可以先查询一下:show VARIABLES like '%max_allowed_packet%';
修改此变量的值:MySQL安装目录下的my.ini文件中的[mysqld]段中的"max_allowed_packet = 1M",如更改为4M(如果没有这行内容,增加一行),保存,重新启动MySQL服务。现在可以load大于1M的文件了。

有时候命令“SET GLOBAL max_allowed_packet=16*1024*1024”无效,需要使用如下命令:set @@max_allowed_packet=5*1024*1024 


  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值